【问题标题】:Class Inheritance with parameters带参数的类继承
【发布时间】:2018-04-29 14:33:05
【问题描述】:

我有一个父类和几个子类。每个子类接受不同的参数,但所有子类都有一些共同的参数。我不想为每个子类编写“公共参数”。我该怎么做?

class Parent:
    def __init__(self, name):
        self.name = name


class Subclass(Parent):
    def __init__(self, age):
         self.age = age

    def do_something(self):
         print(self.name)


instance = Subclass(name="Test", age=42)
instance.do_something()  # 42

【问题讨论】:

  • 把所有公共属性都保留在父级中,这样子级就可以继承它们(这就是继承的全部意义)。请记住,要打电话给父母__init__,您必须拨打super().__init__(name)。如果您使用的是多重继承,它会变得更加复杂,您应该先查看 Python MRO。

标签: python python-3.x class inheritance


【解决方案1】:

你可以试试这个:

class Subclass(Parent):
    def __init__(self, **kwargs):
         super().__init__(kwargs['name'])
         self.age = kwargs['age']

    def do_something(self):
         print(self.name)

然后像你在问题中那样使用它:

instance = Subclass(name="Test", age=42)

【讨论】:

  • 感谢您的回答。该解决方案有效。但问题是,没有更多的参数建议(例如 IntelliSense),其参数仅在父类中定义(例如名称)。有没有办法解决这个问题,而不是将所有参数放在子类的每个 init 函数中,因为大约有 30 个参数,我不想把它们放在每个子类中。
【解决方案2】:

我是这样使用的

您可以添加任意数量的子类

class ParentClass(object):
    def __init__(self,baseArgs):
        self.var1=baseArgs['var1']
        self.var2=baseArgs['var2']
        self.var3=baseArgs['var3']


class ChildClass(ParentClass):
    def __init__(self,childArgs,baseArgs):
        super(ChildClass, self).__init__(baseArgs)
        self.cvar1=childArgs['cvar1']
        self.cvar2=childArgs['cvar2']

a=ChildClass({'cvar1':40,'cvar2':50},{'var1':10,'var2':20,'var3':30})
print(a.var1)
# 10

【讨论】:

  • 感谢您的回答。不幸的是,这对我不起作用,因为,我没有更多的参数推荐。
猜你喜欢
  • 2014-01-07
  • 2020-08-14
  • 2015-06-01
  • 1970-01-01
  • 2011-07-30
  • 2012-11-17
  • 1970-01-01
  • 1970-01-01
  • 2011-01-02
相关资源
最近更新 更多