要定义一个属性,我们可以使用
class MyClass(object):
def __init__(f):
self._f = f
def custom_function(self):
self._f += 1
@property
def f(self):
return self._f
这样
>>x = MyClass(1)
>>print(x.f) # prints 2
有没有定义接口的标准方法
>>MyClass.f # <- calls custom classmethod
?即一个“ @classproperty
”。
我知道,@classmethod
但我不希望该界面有电话()
。
您有两个选择:在元类上放置一个属性,或创建一个自定义描述符以将a.__get__
直接转换为函数调用,而与上下文无关。该property
描述仅做到这一点时,有一个实例,返回self
时在类访问的。
元类:
class MetaClass(type):
@property
def f(cls):
return cls._f
class MyClass(object):
__metaclass__ = MetaClass
def __init__(f):
self._f = f
自定义描述符:
class classproperty(object):
def __init__(self, getter):
self.getter = getter
def __get__(self, instance, cls):
return self.getter(cls)
class MyClass(object):
def __init__(f):
self._f = f
@classproperty
def f(cls):
return cls._f
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句