首先我们来看一下属性的定义
属性的定义:python中的属性其实是普通方法的衍生。
操作类属性有三种方法:
1.使用@property装饰器操作类属性。
2.使用类或实例直接操作类属性(例如:obj.name,obj.age=18,del obj.age)
3.使用python内置函数操作属性。
属性存在的意义:
1、访问属性时可以制造出和访问字段完全相同的假象,属性由方法衍生而来,如果Python中没有属性,方法完全可以代替其功能。
2、定义属性可以动态获取某个属性值,属性值由属性对应的方式实现,应用更灵活。
3、可以制定自己的属性规则,用于防止他人随意修改属性值。
下面详细介绍三种操作类属性的方法:
1.使用@property装饰器操作类属性。
定义时,在普通方法的基础上添加@property装饰器;属性仅有一个self参数,调用时无需括号;
优点:
1) @property装饰器可以实现其他语言所拥有的getter,setter和deleter的功能(例如实现获取,设置,删除隐藏的属性)
2) 通过@property装饰器可以对属性的取值和赋值加以控制,提高代码的稳定性。
实例代码1:
#encoding=utf-8
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(50)
obj.price# 自动执行 @property 修饰的 price 方法,并获取方法的返回值
obj.price = 2000 # 自动执行 @price.setter 修饰的 price 方法,并将2000赋值给方法的参数
del obj.price # 自动执行 @price.deleter 修饰的 price 方法
结果输出:
@property
@price.setter
@price.deleter
实例代码2:通过@property装饰器对属性的取值和赋值加以控制
class Goods(object):
def __init__(self):
self.value=50
@property
def price(self): # 查看属性
return self.value
@price.setter # 添加或设置属性(属性名.setter)
def price(self, value):
if value >=50 and value<=100: #对属性的取值和赋值加以控制
self.value=value
print (self.value)
else:
print ("请输入一个50到100之间的数!")
@price.deleter # 删除属性(属性名.deleter) 注意:属性一旦删除,就无法设置和获取
def price(self):
del self.value
print ("price is deleted!")
obj = Goods()
print (obj.price) # 自动执行 @property 修饰的 price 方法,并获取方法的返回值
obj.price=106 # 自动执行 @price.setter 修饰的 price 方法,并将106 赋值给方法
del obj.price # 自动执行 @price.deleter 修饰的 price 方法
结果输出:
50
请输入一个50到100之间的数!
price is deleted!
实例扩展:
class Dog(object): name = 'dog' def init(self): self.age = 18 d1 = Dog() d2 = Dog()
这里有两个实例 d1,d2 吧。
d1.name # 输出 dogd2.name # 输出 dogd1.name = 'abc' d1.name # 输出 abcd2.name # 输出 dogDog.name # 输出 dog
原因是 d1.name 输出 dog 不是因为这个实例共享了类属性,而是因为这个实例没有 dog 属性,所以 python 查找了类属性。但是一旦你修改了 d1.name 相当于给 d1 实例绑定了 name 属性之后,d1.name 就与类属性无关了。既然这样就谈不上实例之间共享类属性了,因为只要一赋值,就相当于绑定了属性,则上述 d1.name 的含义和 d2.name 的含义就不同了,它们的值也不同,很明显它们的数据没有共享。
python,类属性
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。



