Python_面向对象_类2

类的几个装饰器方法:                                                                                                

@classmethod (类方法):使之无法访问实例变量

class Animal(object):
    def __init__(self, name):
        self.name = name   # 实例变量

    sleep = '睡觉觉后。。'  # 类变量

    @classmethod    # 加上此装饰器便不能访问实例变量,但是可以访问类变量
    def eat(self):     
        print('%s 动物要吃东西。。' % self.sleep)


A = Animal('狗类')
Animal.sleep   # 直接访问类变量
Animal.eat()     # 调用
A.eat()
classmethod
睡觉觉后。。 动物要吃东西。。
睡觉觉后。。 动物要吃东西。。
result

@staticmethod (静态方法):里面就不能有变量了,(和实例就没有关系了),不能访问类变量和实例变量

静态方法  :  作为一个工具箱,里面访问不了外面,类也访问不到里面的东西,只能通过自己把自己传进去,只是通过类可以找到它

class Animal(object):
    def __init__(self, name):
        self.name = name   # 实例变量

    sleep = '睡觉觉后。。'  # 类变量

    @staticmethod   # 静态方法
    def drink():   # 此处加入self将没有任何意义
        print('%s 动物要喝水水。。')    # 不能‘访问’实例变量以及类变量

    @staticmethod   # 静态方法
    def drink1(self):  
        print('%s 动物要喝水水。。' % self.name)    # 可以传入值

A = Animal('狗类')
A.drink()
A.drink1(A)    # 值的传入
staticmethod
%s 动物要喝水水。。
狗类 动物要喝水水。。
result

@property (属性):把类中方法变成了一个属性,不能给里面传值,也不能删除里面的值

class Animal(object):
    def __init__(self, name):
        self.name = name
        self.num = None

    @property     # 变成了一个属性
    def eat(self):
        print('%s 动物要吃饭饭。。' % self.name)

    @property
    def vel(self):
        return self.num

    @vel.setter
    def vel(self, num):
        self.num = num        # 通过.setterf给里面赋值
        print('改过的值:', self.num)

    @vel.deleter         # 通过.deleter从里面删除东西
    def vel(self):
        print('---------')
        del self.num  # 通过这个才能彻底从里面删除变量
     #   print(self.num)

A = Animal('狗类')
A.eat    # 以访问属性的方式,访问eat
print(A.vel)
A.vel = 3
del A.vel    # 删除调用
property
狗类 动物要吃饭饭。。
None
改过的值: 3
---------
result

 私有属性:__名字:直接调用不行但是可以通过_类名__名字 可以访问 

类的部分特殊成员:                                                                                                    

1.__doc__:输出类的描述信息

2.__module__:当前操作的对象在那个模块

3.__class__:当前操作的对象的类是什么

4.__init__:构造方法,通过类创建对象时(一实例化后),自动触发执行

5.__del__:析构方法,当对象在内存中被释放时, 自动触发执行,在所有程序都执行完,自动触发执行

6.__call__:实例化后,对象后面加括号,触发执行此方法

7.__dict__:以字典的形式返回类里的成员变量

8.__str__:如果一个类中定义了此方法,那么在打印对象时,默认输出该方法的返回值

9.__iter__:用于迭代器,之所以列表、字典、元组可以进行for循环,,是因为类型内部定义了此方法

10.__new__:构造了类,如果重写了这个方法,就不会自动触发调用__init__方法了

class Animal(object):
    '''我是一朵小花花,啦啦啦。。'''
    def __init__(self, speak):
        self.speak = speak
        print('%s yes >_< ' % self.speak)
        self.n = 5

    def __str__(self):
        return '小花花长大大。。'
A = Animal('oh!')
print(A.__doc__)        # 类中的描述信息
print(A.__dict__)        # 打印类里的实例变量
print(A)          # 自动触发的__str__
部分实现
oh! yes >_< 
我是一朵小花花,啦啦啦。。
{'speak': 'oh!', 'n': 5}
小花花长大大。。
result

具体参照:http://www.cnblogs.com/wupeiqi/p/4766801.html

原文地址:https://www.cnblogs.com/Vera-y/p/9852897.html