在 Python 3 中,您的代码可以工作,但在 Python 2 中,查找方法时会发生一些包装。
类与实例
班级水平
类静态变量的公认做法是使用可变的默认参数:
class foo(object):
...
def bar(self, _counter=[0]):
_counter[0] += 1
return _counter[0]
如果你想让它更漂亮,你可以定义你自己的可变容器:
class MutableDefault(object):
def __init__(self, start=0):
self.value = start
def __iadd__(self, other):
self.value += other
return self
def value(self):
return self.value
并像这样更改您的代码:
class foo(object):
def bar(self, _counter=MutableDefault()):
_counter += 1
return _counter.value
实例级别
from functools import partial
class foo(object):
def __init__(self):
def bar(self, _counter=MutableDefault(1)): # create new 'bar' each time
value = _counter.value
_counter += 1
return value
self.bar = partial(bar, self)
概括
如您所见,当迁移到counter
. 我强烈建议您重新评估强调它counter
是. 如果它不是很重要,请按正常方式进行:bar
bar
foo
class foo(object):
def __init__(self):
self.bar_counter = 0
def bar(self):
self.bar_counter += 1
return self.bar_counter