问题
Why such structure
class A:
def __init__(self, a):
self.a = a
def p(self, b=self.a):
print b
gives an error NameError: name 'self' is not defined
?
回答1:
Default argument values are evaluated at function define-time, but self
is an argument only available at function call time. Thus arguments in the argument list cannot refer each other.
It's a common pattern to default an argument to None
and add a test for that in code:
def p(self, b=None):
if b is None:
b = self.a
print b
回答2:
For cases where you also wish to have the option of setting 'b' to None:
def p(self, **kwargs):
b = kwargs.get('b', self.a)
print b
回答3:
If you have arrived here via google, please make sure to check that you have given self as the first parameter to a class function. Especially if you try to reference values for that object inside the function.
def foo():
print(self.bar)
>NameError: name 'self' is not defined
def foo(self):
print(self.bar)
>"Congrats you got rid of the NameError!"
来源:https://stackoverflow.com/questions/1802971/nameerror-name-self-is-not-defined