我想问问这个属性修饰符创建描述符的问题
class C:def __init__(self):
self._x = None
@property
def xin(self):
return self._x
@xin.setter
def xin(self, value):
self._x = value
@xin.deleter
def xin(self):
del self._x
a= C()
print (a.xin)
a.xin = 'fsfsfa'
print (a.xin)
#del a.x
#print (a.x) 杨东明 发表于 2021-7-13 16:47
@property @name.setter @name.deleter 三个统称属性符吗?描述符是哪个?还有就是我没搞懂@proper ...
属性(property)提供了一种安全、便捷的方式来与这些属性(attribute)交互,而不需要手动编写一系列的访问方法,如果需要的话可以自定义getter和setter方法来覆盖编译器自动生成的相关方法。
@property是在函数def xin(self)上方的
这样的话就可以直接使用getter,sttter,deleter方法来对函数xin修改他的属性,你这上面的话也就是传进去的value值。
这个方法getter必须写在setter和deleter的最前面,且getter、setter、deleter使用同一个函数名(这里的getter也就是@property)
@property下方的函数也就变成了property修饰符名
所以setter前面的函数名必须是@property下方的函数
描述的有点复杂,不懂得话我在用代码表示出来吧 @property @name.setter @name.deleter 三个统称属性符吗?描述符是哪个?还有就是我没搞懂@property下它是怎么懂目标属性的名字?这里代码里面属性的名字不是叫_x嘛,然后下面对实例对象属性修改的时候用的xin,我没懂这个xin是怎么确定的,我先是只改了@name.setter @name.deleter里面name的名字,但是运行他提醒我这个变量没有被定义,将三个@property @name.setter @name.deleter下的函数方法名改成一样的才正常,这个xin是靠函数方法的名字来确定吗? 本帖最后由 杨东明 于 2021-7-13 17:06 编辑
class Goods(object):
def __init__(self):
self.price = 100# 原价
self.discount = 0.8# 折扣
def get_price(self):
# 实际价格 = 原价 * 折扣
new_price = self.price * self.discount
return new_price
def set_price(self, value):
self.price = value
def del_price(self):
del self.price
# 获取 设置 删除 描述文档
PRICE = property(get_price, set_price, del_price, '价格属性描述...')
# 使用此方式设置
obj = Goods()
print (obj.PRICE)# 获取商品价格
obj.PRICE = 200# 修改商品原价
print (obj.PRICE)
del obj.PRICE# 删除商品原价
运行结果:80160
像这个代码,获取属性那儿返回的是new_price,实例属性名字是price,下面更改属性名字又说PRICE,然后就是这个打印结果,第一个print 打印PRICE打印的是new_price,但是接下来的obj.PRICE赋值改的却是之前实例属性price的值,也就是一个PRICE涉及两个函数属性的值,脑壳都晕了{:9_220:} 再问问那个PRICE = property(get_price, set_price, del_price, '价格属性描述...'),最后的这个文本符怎么触发?我百度查的实例对象.属性.doc,但是报错doc未定义??? BanCan笑 发表于 2021-7-14 14:23
属性(property)提供了一种安全、便捷的方式来与这些属性(attribute)交互,而不需要手动编写一系列的访 ...
那还有请问就是PRICE = property(get_price, set_price, del_price, '价格属性描述...'),这个最后的文本符怎么触发?
页:
[1]