Python_面向对象_类2
类的几个装饰器方法:
@classmethod (类方法):使之无法访问实例变量
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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()
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
睡觉觉后。。 动物要吃东西。。
睡觉觉后。。 动物要吃东西。。
@staticmethod (静态方法):里面就不能有变量了,(和实例就没有关系了),不能访问类变量和实例变量
静态方法 : 作为一个工具箱,里面访问不了外面,类也访问不到里面的东西,只能通过自己把自己传进去,只是通过类可以找到它
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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) # 值的传入
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
%s 动物要喝水水。。
狗类 动物要喝水水。。
@property (属性):把类中方法变成了一个属性,不能给里面传值,也不能删除里面的值
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 # 删除调用
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
狗类 动物要吃饭饭。。
None
改过的值: 3
---------
私有属性:__名字:直接调用不行但是可以通过_类名__名字 可以访问
类的部分特殊成员:
1.__doc__:输出类的描述信息
2.__module__:当前操作的对象在那个模块
3.__class__:当前操作的对象的类是什么
4.__init__:构造方法,通过类创建对象时(一实例化后),自动触发执行
5.__del__:析构方法,当对象在内存中被释放时, 自动触发执行,在所有程序都执行完,自动触发执行
6.__call__:实例化后,对象后面加括号,触发执行此方法
7.__dict__:以字典的形式返回类里的成员变量
8.__str__:如果一个类中定义了此方法,那么在打印对象时,默认输出该方法的返回值
9.__iter__:用于迭代器,之所以列表、字典、元组可以进行for循环,,是因为类型内部定义了此方法
10.__new__:构造了类,如果重写了这个方法,就不会自动触发调用__init__方法了
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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__
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
oh! yes >_<
我是一朵小花花,啦啦啦。。
{'speak': 'oh!', 'n': 5}
小花花长大大。。
具体参照:http://www.cnblogs.com/wupeiqi/p/4766801.html