我正在使用Python 2.7中的一个程序,并发现自己试图将Python类字段作为参数传递到同一个类中。虽然我修改了我的代码以使其更清洁(从而消除了对这种结构的需要),但我仍然很好奇。
对于一些例子(非常简化,但概念存在):
[注意:对于示例1和2,假设我想要一个数字作为输入并递增它,或者增加当前值。]
示例1。
class Example:
def __init__(self,x):
self.value = x
def incr(self,x=self.value):
self.value = x + 1
结果:
"NameError: name 'self' is not defined"
示例2。
class Example:
def __init__(self,x):
self.value = x
def incr(self,x=value):
self.value = x + 1
结果:
"NameError: name 'value' is not defined"
示例3。
class Example:
def __init__(self,x):
ex2 = Example2()
self.value = ex2.incr(x)
def get_value(self):
return self.value
class Example2:
def __init__(self):
self.value = 0
def incr(self,x):
return x + 1
ex = Example(3)
print ex.get_value()
结果:
4
重述我的问题,为什么我不能将Python类字段作为参数传递给它自己的方法?
如果您有任何其他问题或需要更多信息,请与我们联系。谢谢!
答案 0 :(得分:3)
方法默认值在定义方法时计算,而不是在调用方法时计算。此时,类仍在定义,因此不存在该类型的对象。因此,您无法使用self
。
您可以使用默认值None
的解决方法,并在方法中对此进行测试:
def incr(self,x=None):
if x is None:
x = self.value
self.value = x + 1