【问题标题】:How to call a child class with no parameter in contructor in python?如何在python的构造函数中调用没有参数的子类?
【发布时间】:2020-11-11 13:13:45
【问题描述】:

我有一个多父类,超父类是

class Item:
    def __init__(self, name):
        self.name = name
    
    def print_name(self):
        print("The item name is " + self.name)

基类是:

class Gadget(Item):
    def __init__(self, name,
       version):
        self.name = name
        self.version = version
 
    def print_attribute(self):
       pass
       #do for attribute

基类的子类是:

class Mobile_Phone(Gadget):
    def __init__():
        pass

所以当我实例化子类时

item = Mobile_Phone("Iphone", "iOS")
item.print_name()

它给了我一个错误,contuctor 有 0 个位置参数,但给出了 3 个

【问题讨论】:

  • 需要先初始化父类属性
  • 如果您尝试将多个参数传递到其构造函数中,为什么 Mobile_Phone 的 __init__() 参数为零?
  • 这是给出的指令: # 用正确的父类定义每个子类。 # 构造函数应该不接受任何参数,并且应该根据实际项目调用其父构造函数并传递适当的参数

标签: python python-3.x inheritance constructor multiple-inheritance


【解决方案1】:

您需要了解 OOP 的概念,如果您在对象构造期间发送参数,那么您的构造函数应该有参数来保存参数。

item.py

class Item:
    def __init__(self, name):
        self.name = name
    
    def print_name(self):
        print("The item name is " + self.name)

小工具.py

from item import Item

class Gadget(Item):
    def __init__(self, name, version):
        Item.__init__(self, name)
        self.version = version
 
    def print_attribute(self):
       print(self.name)
       print(self.version)

Mobile_Phone.py

from Gadget import Gadget

class Mobile_Phone(Gadget):
    def __init__(self, name, version):
        Gadget.__init__(self, name, version)


item = Mobile_Phone("Iphone", "iOS")
item.print_name()

输出:

The item name is Iphone

【讨论】:

    【解决方案2】:

    如果您的子类初始化程序没有对您传递的参数做任何事情,那么它们就会丢失。在您概述的模型中,您可以简单地省略子类中的初始化程序以获得您想要的。

    class MobilePhone(Gadget):  # PEP8 calls for CamelCase here
        pass
    

    在这种情况下,继承自Gadget 的初始化程序设置了继承的Item.print_name 引用的self.name

    【讨论】:

      猜你喜欢
      • 2021-09-19
      • 1970-01-01
      • 1970-01-01
      • 2012-01-25
      • 2017-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多