2012-08-03 139 views
1

我正在Python 2.7中开发一个程序,发现自己试图在同一个类中传递一个Python类字段作为参数。虽然我修改了我的代码以使其更清洁(从而消除了此构造的需要),但我仍然好奇。为什么我不能将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类字段作为它自己的参数方法?

如果您有任何其他问题或需要更多信息,请告知我们。谢谢!

+2

您的问题? http://stackoverflow.com/questions/1802971/nameerror-name-self-is-not-defined – russ36363 2012-08-03 22:18:21

回答

3

方法默认值是在定义方法时评估的,而不是在调用方法时评估。此时该类仍在定义中,因此不存在该类型的对象。因此您不能使用self

可以使用具有None默认值和测试这个你的方法内部的解决办法:可能

def incr(self,x=None): 
    if x is None: 
     x = self.value 
    self.value = x + 1 
+0

谢谢,我现在回想起当我第一次学习Python时听到的一些事情...... – 2012-08-03 23:07:47

相关问题