【问题标题】:How can I add attributes to a derivated class?如何向派生类添加属性?
【发布时间】:2020-04-23 05:50:55
【问题描述】:
class Human():
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def hablar(self, message):
        print(message)


class Alien(Human):
    def __init__(self, planet):
        self.planet = planet

    def fly(self):
        print("I'm flying!")

此代码是显示我想要做什么的示例。想象一下,我想让一个外星人继承人类的所有属性,但我也希望他有一个行星属性来区分它来自哪个行星。

当我按照上述代码中的方式进行操作时,它不起作用。有可能做到吗?怎么样?

谢谢!

【问题讨论】:

    标签: python inheritance


    【解决方案1】:

    你可能想参考这个question关于从子类调用父类构造函数。

    你需要在Alien的__init__中使用父类的dunder方法__init__,如下:

    class Human():
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        def hablar(self, message):
            print(str(message))
    
    
    class Alien(Human):
    
        def __init__(self, name, age, planet):
            super().__init__(name, age)
            self.planet = planet
    
        def fly(self):
            print("I'm flying!")
    

    【讨论】:

    【解决方案2】:

    需要引用父类的构造函数。

    class Alien(Human):
        def __init__(self, name, age, planet):
            super().__init__(name, age)
            self.planet = planet
    

    【讨论】:

      【解决方案3】:
      class Human():
          def __init__(self, name, age):
              self.name = name 
              self.age = age
      
      class Alien(Human):
          def __init__(self, planet, **kwargs):
              self.planet = planet
              super(Alien, self).__init__(**kwargs)
      
      
      Z = Alien(planet='Venus',name='Z',age=21)
      print(Z.__dict__)
      

      输出:

      {'planet': 'Venus', 'name': 'Z', 'age': 21}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-29
        相关资源
        最近更新 更多