Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python类继承问题_Python - Fatal编程技术网

Python类继承问题

Python类继承问题,python,Python,当我尝试这样做时,我得到了一个错误NameError:global name'name'未定义是否有一个简单的解决方法 class C(object): def __init__(self, name): self.name = name class D(C): def __init__(self): C.__init__(self, name) obj1 = D() 在类D中,当您从C初始化它时,您没有向C的初始化传

当我尝试这样做时,我得到了一个错误
NameError:global name'name'未定义
是否有一个简单的解决方法

class C(object): 
    def __init__(self, name): 
            self.name = name
class D(C): 
    def __init__(self): 
            C.__init__(self, name)
obj1 = D() 


在类
D
中,当您从
C
初始化它时,您没有向
C
的初始化传递值,因此当它试图传递该值时会引发名称错误。您需要允许
D
获取值
name
,然后将其传递给
C

C类(对象):
定义初始化(self,name):
self.name=名称
D(C)类:
定义初始化(self,name):
C.uuu init_uuu(self,name)#在初始化D时必须传递name。
或者在
D
中为
name
定义默认值

C类(对象):
定义初始化(self,name):
self.name=名称
D(C)类:
def uuu init uuu(self,name='Monty Python'):
C.uu init_uu(self,name)#仅允许您在需要时传递名称。

在类
D
中,当您从
C
初始化它时,您没有将值传递给
C
的初始化,因此它在尝试传递时会引发名称错误。您需要允许
D
获取值
name
,然后将其传递给
C

C类(对象):
定义初始化(self,name):
self.name=名称
D(C)类:
定义初始化(self,name):
C.uuu init_uuu(self,name)#在初始化D时必须传递name。
或者在
D
中为
name
定义默认值

C类(对象):
定义初始化(self,name):
self.name=名称
D(C)类:
def uuu init uuu(self,name='Monty Python'):
C.uu init_uu(self,name)#仅允许您在需要时传递名称。

在此处使用,而不是使用父类名称,以便以后如果需要,可以启用诸如mixin、接口、抽象类等功能

然后还可以允许在子类中使用父类中的那些关键字参数,如下所示:

class D(C):
    def __init__(self,**kwargs):
        super(D,self).__init__(**kwargs)
用法示例:

In [349]: obj1 = D(name='test')                                                

In [350]: obj1.name                                                            
Out[350]: 'test'

不要在这里使用父类名称,这样以后如果需要,可以启用诸如mixin、接口、抽象类等

然后还可以允许在子类中使用父类中的那些关键字参数,如下所示:

class D(C):
    def __init__(self,**kwargs):
        super(D,self).__init__(**kwargs)
用法示例:

In [349]: obj1 = D(name='test')                                                

In [350]: obj1.name                                                            
Out[350]: 'test'

永远不要硬编码您继承的方法,而不是这样做super(),如果您想更改方法,只需更改类名即可

在python3中,不需要为super()指定参数

    class C(object):
        def __init__(self, name):
            self.name = name

    class D(C):
        def __init__(self, name):
            super().__init__(self, name)

永远不要硬编码您继承的方法,而不是这样做super(),如果您想更改方法,只需更改类名即可

在python3中,不需要为super()指定参数

    class C(object):
        def __init__(self, name):
            self.name = name

    class D(C):
        def __init__(self, name):
            super().__init__(self, name)

嗨,欢迎来到SO!这看起来像是家庭作业。如果需要,请阅读并回答您的问题。
C.\uuu init\uuuu(self,name)
hi,欢迎来到SO!这看起来像是家庭作业。如果需要,请阅读并回答您的问题。
C.\uuuu init\uuuuu(self,name)
您不必为super()提供参数,默认情况下它将接受类。我理解这一点。我这样做是为了让学习该语言的人更清楚。默认情况下,你不必为super()提供参数,它将接受类。我理解这一点。我这样做是为了让学这门语言的人更清楚。