当前位置:  开发笔记 > 编程语言 > 正文

如何使用super()初始化python中的子类参数

如何解决《如何使用super()初始化python中的子类参数》经验,为你挑选了1个好方法。

我已经看到了关于如何在python中使用'super'的各种示例,但在所有这些示例中,没有参数传递给子类的init方法.请考虑以下示例.

这是基类:

class Animal(object):

    def __init__(self, genus):
        self.genus = genus

现在heres没有使用超级:

class Dog(Animal):

    def __init__(self, genus):
        Animal.__init__(self, genus)


x = Dog('Canis')
print x.genus  # Successfully prints "Canis"

现在,当我使用super时:

class Dog(Animal):

    def __init__(self, genus):
        super(Animal, self).__init__(genus)

x = Dog('Canis')
print x.genus  

我收到以下错误:

TypeError: object.__init__() takes no parameters

那么如果对象.init()不带参数,如何在实例化那个子类时设置这个特定动物的特定属?我是否必须显式分配这样的变量:

class Dog(Animal):

    def __init__(self, genus):
        super(Animal, self).__init__()
        self.genus = genus

Mike Müller.. 8

修复

写:

class Dog(Animal):

    def __init__(self, genus):
        super(Dog, self).__init__(genus)

所以代替:

super(Animal, self).__init__(genus)

使用:

super(Dog, self).__init__(genus)

想一想:什么是超级DogAnimal对于这个案例,这个问题的答案是正确的.但是如果你使用多重继承,这可能会有所不同.

Python 3用于救援

如果您使用Python 3,所有事情都会变得更简单:

class Dog(Animal):

    def __init__(self, genus):
        super().__init__(genus)

作品.犯错的表面要少得多.

Python 3中的Python 3细节与Python-Future

如果您需要使用Python 2,请考虑使用Python-Future.你可以在Python 2上做到这一点:

from builtins import object, super

class Animal(object):

    def __init__(self, genus):
        self.genus = genus

class Dog(Animal):

    def __init__(self, genus):
        super().__init__(genus)

x = Dog('Canis')
print(x.genus)  

builtins模块来自Python-Future.使用它,允许您在Py​​thon 2中编写Python 3(至少对于所有重要的更改).



1> Mike Müller..:

修复

写:

class Dog(Animal):

    def __init__(self, genus):
        super(Dog, self).__init__(genus)

所以代替:

super(Animal, self).__init__(genus)

使用:

super(Dog, self).__init__(genus)

想一想:什么是超级DogAnimal对于这个案例,这个问题的答案是正确的.但是如果你使用多重继承,这可能会有所不同.

Python 3用于救援

如果您使用Python 3,所有事情都会变得更简单:

class Dog(Animal):

    def __init__(self, genus):
        super().__init__(genus)

作品.犯错的表面要少得多.

Python 3中的Python 3细节与Python-Future

如果您需要使用Python 2,请考虑使用Python-Future.你可以在Python 2上做到这一点:

from builtins import object, super

class Animal(object):

    def __init__(self, genus):
        self.genus = genus

class Dog(Animal):

    def __init__(self, genus):
        super().__init__(genus)

x = Dog('Canis')
print(x.genus)  

builtins模块来自Python-Future.使用它,允许您在Py​​thon 2中编写Python 3(至少对于所有重要的更改).

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有