(我已经编辑了我以前的 anwser,它正在工作,但正如所指出的,这并不是一个很好的做法)
Python 中的对象表示在这里有轻微的混淆:
test1 = A
print test1 #return : <class '__main__.A'>
在 python 中,您可以复制一个类,因为 Python 中的一个类也是一个对象。您可以将其视为别名,但它比这更有用。
test2 = A()
print test2 #return : <__main__.A object at 0x0126DF90>
在这里,您在某个地址创建了一个 A 对象。
print test1().a
你正在做的是在现实中:A().a
。换句话说,您创建一个临时对象,然后调用 a 属性。它在您的示例中有效,但它并不比静态方法更有用,因为对象是临时的(通常使用类方法来查看/修改对象的内部状态)。
print test2().a # == [A()]().a
这不起作用,因为您想将对象作为方法调用。为此,您必须__call__
在类描述中添加一个特殊方法。如果您的财产很重要,那我会这样做:
class State(object):
" Dummy Finite state machine "
def __init__(self)
self.count = 0
@property
def state(self):
return self.count % 4
def __call__(self):
return self.state
def next(self):
self.count +=1
s = State() # State object
print s() # return 0
s.next() # count = 1
s.next() # count = 2
s.next() # count = 3
s.next() # count = 4
s.next() # count = 5
print s() # return 5 % 4 =1