Rus*_*bot 5 python properties class
我有下一个代码
global_variable = 1
@property
def method():
# Some magic, for example
# incrementing global variable
global global_variable
global_variable += 1
return global_variable
print method
Run Code Online (Sandbox Code Playgroud)
此代码返回
<property object at 0x28dedb8>
Run Code Online (Sandbox Code Playgroud)
但我期望2。在python中是否可以在类外部使用属性装饰器?
@properties是指在类中定义的实例属性。例如:
class A(object):
@property
def a(self):
return 2
b = A()
b.a
=> 2
Run Code Online (Sandbox Code Playgroud)
据我了解,您正在尝试定义模块属性(或“全局”属性)。没有简单/干净的方法可以做到这一点。请参阅此相关问题。
编辑:您还可以定义一个classproperty,使您的属性更具全局性(不需要实例)。classproperty不是内置的,但易于定义。这是定义它的一种方法:
class classproperty(object):
def __init__(self, f):
self.f = classmethod(f)
def __get__(self, *a):
return self.f.__get__(*a)()
Run Code Online (Sandbox Code Playgroud)
现在您可以执行以下操作:
class A(object):
@classproperty
def a(self):
return 2
A.a
=> 2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3573 次 |
| 最近记录: |