不带类的属性方法[重复]
问题内容:
这个问题已经在这里有了答案 :
模块可以具有与对象相同的属性吗? (6个答案)
7年前关闭。
我有下一个代码
global_variable = 1
@property
def method():
# Some magic, for example
# incrementing global variable
global global_variable
global_variable += 1
return global_variable
print method
此代码返回
<property object at 0x28dedb8>
但我期望2。在python中是否可以在类外使用属性装饰器?
问题答案:
@properties
是指在类中定义的 实例 属性。例如:
class A(object):
@property
def a(self):
return 2
b = A()
b.a
=> 2
据我了解,您正在尝试定义模块属性(或“全局”属性)。没有简单/干净的方法可以做到这一点。请参阅此相关问题。
编辑:您还可以定义一个classproperty
,使您的属性更具全局性(不需要实例)。classproperty
不是内置的,但易于定义。这是定义它的一种方法:
class classproperty(object):
def __init__(self, f):
self.f = classmethod(f)
def __get__(self, *a):
return self.f.__get__(*a)()
现在您可以执行以下操作:
class A(object):
@classproperty
def a(self):
return 2
A.a
=> 2