上一篇:Python 类与对象编程详解二(成员保护和访问限制)
目录
类属性
属性的定义
python中的属性其实是普通方法的衍生。
操作类属性的三种方法
1.使用@property装饰器操作类属性。
2.使用类或实例直接操作类属性(例如:obj.name,obj.age=18,del obj.age)
3.使用python内置函数操作属性。
属性存在的意义
1、访问属性时可以制造出和访问字段完全相同的假象,属性由方法衍生而来,如果Python中没有属性,方法完全可以代替其功能。
2、定义属性可以动态获取某个属性值,属性值由属性对应的方式实现,应用更灵活。
3、可以制定自己的属性规则,用于防止他人随意修改属性值。
操作类属性的方法
使用@property装饰器操作类属性
定义时,在普通方法的基础上添加@property装饰器;属性仅有一个self参数,调用时无需括号;
优点:
1) @property装饰器可以实现其他语言所拥有的getter,setter和deleter的功能(例如实现获取,设置,删除隐藏的属性)
2) 通过@property装饰器可以对属性的取值和赋值加以控制,提高代码的稳定性。
实例:
class Goods(): #定义类
@property
def price(self): #查看属性值
print('@property')
@price.setter
def price(self,value):
print('@price.setter')
@price.deleter
def price(self):
print('@price.deleter')
obj = Goods()
obj.price #自动执行@property修饰的price方法,并获取方法的返回值
obj.price = 2000 #自动执行price.setter 修饰的 price 方法,并将2000赋值给方法的参数
del obj.price # 自动执行 @price.deleter 修饰的 price 方法
运行结果:
@property
@price.setter
@price.deleter
通过@property装饰器对属性的取值和赋值加以控制
实例2:
class Goods():#定义类
def __init__(self):
self.value = 50
@property
def price(self): #查看属性值
return self.value
@price.setter
def price(self,value):
self.value = value
print("value = ",value)
@price.deleter
def price(self):
del self.value
print("属性值删除成功")
obj = Goods()
print(obj.price) #自动执行@property修饰的price方法,并获取方法的返回值
obj.price = 2000 #自动执行price.setter 修饰的 price 方法,并将2000赋值给方法的参数
del obj