Python:变量,继承和默认参数

ami*_*mel 4 python variables inheritance class self

我想我对Python中"class"和"inheritance"的使用有一些误解.我将简化我的问题如下:

class A:
    def __init__(self):
        self.data = 100

class B(A):
    def b(self):
        print self.data

>>>B().b()
>>>100
Run Code Online (Sandbox Code Playgroud)

好的,到目前为止一切顺利.但是,如果我创建另一个类,则会出现问题,如下所示:

class C(A):
    def c(self, num=self.data):
        print self.data

>>>C().c()
NameError: name 'self' is not defined
Run Code Online (Sandbox Code Playgroud)

我想将'num'的默认值设置为self.data,即'100'.没有'class',它会更简单:

data = 100
def d(num = data):
    print num

>>>d()
>>>100
Run Code Online (Sandbox Code Playgroud)

我已经搜索了一些文章,但仍然坚持这个问题...提前谢谢!

Rik*_*ggi 10

当你这样做:

class C(A):
    def c(self, num=self.data):
        print self.data
Run Code Online (Sandbox Code Playgroud)

你做的事情是这样的:

>>> def d(num, data=num):
...     print(num, data)
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'num' is not defined
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,python编译器不知道第二个num是什么.

但没有什么可以阻止你做以下事情:

class C(A):
    def c(self, num=None):
        print num or self.data
Run Code Online (Sandbox Code Playgroud)

或明确None检查:

class C(A):
    def c(self, num=None):
        if num is None:
            num = self.data
        print num
Run Code Online (Sandbox Code Playgroud)