Python对象属性
属性:
1. 数据属性--变量
2. 函数属性--方法
类的属性基本操作
class Chinese: # 类属性 color = 'yellow' def __init__(self): pass def method(self): print('吹牛逼') # 1.查看类属性 Chinese.color # 2.修改类属性 Chinese.color='BLACK' # 3.增加类属性 Chinese.city='BeiJing' # 4.删除类的属性 del Chinese.color
实例属性的基本操作
class Chinese: # 类属性 color = 'yellow' def __init__(self): self.name='jack' def method(self): print('吹牛逼') p=Chinese() # 1. 调用实例属性 p.name # 2. 新增实例属性 p.age=32 # 3. 删除实例属性 del p.age # 4. 修改实例属性 p.name='rose'
静态属性
使用 @property
class Room: def __init__(self,width,height): self.width=width self.height=height """将方法变为静态属性,调用时直接使用对象调用不用像调用方法一样使用 括号, 让用户在调用时完全感觉不到,就像是在调用普通属性一样。""" @property def mianji(self): return self.width*self.height r=Room(100,200) val=r.mianji
使用@property ,同时搭配它的 set 或 del 方法
class Food: def __init__(self): self.base_price=5 self.kg=3 @property def price(self): return self.base_price * self.kg @price.setter def price(self,value): self.base_price=value @price.deleter def price(self): del self.base_price obj=Food() print(obj.price) obj.price=10 print(obj.price) del obj.price print(obj.price)
类方法
使用 @classmethod
class Demo: tag='tag' """类方法,支持使用类名来直接调用,但是该方法无法参与实例的操作,因为缺少 self实例参数的支持""" @classmethod def func(cls,name): print(cls) # <class '__main__.Demo'> print(cls.tag) # tag print(name) #jack Demo.func('jack')
静态方法
使用 @staticmethod , 静态方法一般作为类的工具包来使用,常见有作为公用 utils
class Demo: tag='tag' """静态方法,支持类名直接调用,也支持对象来调用,但是方法内部不能使用类属性变量和实例属性变量,因为没有 cls 或 shelf """ @staticmethod def func(name,age): print(name,age) Demo.func('jack',23) obj=Demo() obj.func('rose',32)