您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在类方法上使用property()

在类方法上使用property()

属性是在类上创建的,但会影响实例。因此,如果要使用classmethod属性,请在元类上创建该属性

>>> class foo(object):
...     _var = 5
...     class __Metaclass__(type):  # Python 2 @R_301_1452@ for Metaclasses
...         pass
...     @classmethod
...     def getvar(cls):
...         return cls._var
...     @classmethod
...     def setvar(cls, value):
...         cls._var = value
...     
>>> foo.__Metaclass__.var = property(foo.getvar.im_func, foo.setvar.im_func)
>>> foo.var
5
>>> foo.var = 3
>>> foo.var
3

但是由于无论如何都使用元类,因此只要将类方法移入其中,它就会更好看。

>>> class foo(object):
...     _var = 5
...     class __Metaclass__(type):  # Python 2 @R_301_1452@ for Metaclasses
...         @property
...         def var(cls):
...             return cls._var
...         @var.setter
...         def var(cls, value):
...             cls._var = value
... 
>>> foo.var
5
>>> foo.var = 3
>>> foo.var
3

或者,使用Python 3的Metaclass=...语法,在foo类主体外部定义的元类,以及负责设置初始值的元类_var:

>>> class foo_Meta(type):
...     def __init__(cls, *args, **kwargs):
...         cls._var = 5
...     @property
...     def var(cls):
...         return cls._var
...     @var.setter
...     def var(cls, value):
...         cls._var = value
...
>>> class foo(Metaclass=foo_Meta):
...     pass
...
>>> foo.var
5
>>> foo.var = 3
>>> foo.var
3
其他 2022/1/1 18:18:04 有489人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶