property工作流程参考
Topic source例:
class test:
def __init__(self):
self.__name=None
@myproperty
def name(self):
return self.__name
@name.setter
def name(self,value):
if value < 0:
print('no')
return
self.__name=value
注释:类myproperty中各参数指什么
方法函数中传入的第一个参数self 是 name(也就是@myproperty 下面的函数name)
@myproperty 定义完name函数之后,会自动运行property中的构造函数__init__
@name.setter 运行name.setter函数,参数:self=name #第一个name setx=test.name (同理:getx=test.name #@name.getter 下面的那个name函数)
setter函数中的: return type(self)(self.getx, setx, self.delx, self.__doc__) 相当于: myproperty(text.name) #此时,除了setx外,其余的都仍是None (因为我在例子中没有定义其余的)
setter ,getter 这两个函数的作用是:定义类对象中的函数,使原函数名具有新的作用,
当在交互模式中出现:
类名.name ——> 运行name.__get__函数,实参instance=类对象, owner=类 #print(owner):<class '__main__.test'> 也相当于类对象的类型
返回值 self.getx(instance) 相当于: test.name(t) #注意,这里虽然和下文中都是test.name, 只是因为方便大家理解,这两个name并不是同一个,计算机看到的也是getx和setx,会自动区分
类名.name=xxx ——> 运行name.__set__函数,value=xxx
返回值 return self.setx(instance,value) 相当于: test.name(t, xxx)
__get__, __set__ 这两个函数的作用是:在返回值中调用原函数
至于为什么python看到 test.name=xxx 就会调用__get__ 我想不通,有知道的希望告诉我一下
- 1
一盒噪噪
(博主写的具有property功能的类,具体例子可查看原网址)
class myproperty(object):
def __init__(self, getx=None, setx=None, delx=None, doc=None):
self.getx = getx
self.setx = setx
self.delx = delx
self.__doc__ = doc
def getter(self, getx):
return type(self)(getx, self.setx, slef.delx, self.__doc__)
def setter(self, setx):
return type(self)(self.getx, setx, self.delx, self.__doc__)
def __get__(self, instance, owner):
if self.getx:
return self.getx(instance)
return None
def __set__(self, instance, value):
if self.setx:
return self.setx(instance,value)
---------------------
作者:潇垚
来源:CSDN
原文:https://blog.csdn.net/u010872995/article/details/50389213
版权声明:本文为博主原创文章,转载请附上博文链接!
property属性的有两种方式
property方法中有个四个参数
作者:DevOps海洋的渔夫
链接:https://www.jianshu.com/p/83a6bfae8b64
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。