Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.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_Python 3.x_Class_Inheritance - Fatal编程技术网

Python 带参数的类继承

Python 带参数的类继承,python,python-3.x,class,inheritance,Python,Python 3.x,Class,Inheritance,我有一个父类和几个子类。每个子类接受不同的参数,但所有子类都有一些公共参数。我不想为每个子类编写“公共参数”。我该怎么做 class Parent: def __init__(self, name): self.name = name class Subclass(Parent): def __init__(self, age): self.age = age def do_something(self): pri

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

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
您可以尝试以下方法:

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)

我使用它的方式如下

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

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

在父级中保留所有公共属性,以便子级可以继承它们(这就是继承的全部要点)。请记住,要调用父级
\uuuu init\uuu
,必须执行
super()。\uuuu init\uuu(名称)
。如果您使用多重继承,它会变得更复杂,您应该首先研究Python MRO。谢谢您的回答。解决方案是有效的。但问题是,没有更多的参数建议(例如IntelliSense)只在父类(例如name)中定义参数。有没有办法解决这个问题,不用把所有参数都放在子类的每个init函数中,因为大约有30个参数,我不想把它们放在每个子类中。谢谢你的回答。不幸的是,这对我不起作用,因为这样我就没有更多的参数建议了。