Python 导致子类中父类初始化的要求是什么?

Python 导致子类中父类初始化的要求是什么?,python,inheritance,initialization,subclassing,Python,Inheritance,Initialization,Subclassing,我对OOP还是新手 在子类的实例中,我希望使用在初始化父类时设置的参数: class parent(): def __init__(self, config): self._config = config class child(parent): print self._config x = "Hello" c = child(x) 这不起作用,会抛出一个错误,因为self未知。我真的需要每次从父类复制完整的\uuuu init\uuu块吗?我发现在某些

我对OOP还是新手

在子类的实例中,我希望使用在初始化父类时设置的参数:

class parent():
    def __init__(self, config):
        self._config = config

class child(parent):  
    print self._config

x = "Hello"
c = child(x)
这不起作用,会抛出一个错误,因为self未知。我真的需要每次从父类复制完整的
\uuuu init\uuu
块吗?我发现在某些情况下,可以在不使用
\uuuu init\uuu
块的情况下触发初始化:

class parent():
    def __init__(self, config):
        self._config = config

class child(parent):  
    # Nonsense since not itarable, but no error anymore
    def next(self):
        print self._config

x = "Hello"
c = child(x)
尽管这不起作用,但它仍然不会抛出错误。 是否有任何简短的方法来初始化子类中的父类或从父类获取所有参数

x = "Hello"
c = child(x)
此代码使用
\u config=“Hello”
创建
子对象的实例

然而,这就是它所做的一切。它不会打印您似乎期望的
\u config
的值

如果您想让
\uuuu init\uuuu
函数打印
self.\u config
的值,则必须添加代码才能完成此操作

此代码使用
\u config=“Hello”
创建
子对象的实例

然而,这就是它所做的一切。它不会打印您似乎期望的
\u config
的值


如果您想让
\uuuu init\uuuu
函数打印
self.\u config
的值,则必须添加代码才能完成此操作。

您只需调用父级的\uuu init\uuu,这是常见的做法:

class child(parent):
    def __init__(self, config):
        super(child, self).init(config)
        print self._config

您只需调用父级的\uuuuu init\uuuu,这是常见的做法:

class child(parent):
    def __init__(self, config):
        super(child, self).init(config)
        print self._config
要传递给父级的所有参数都必须传递给子级,以便在子级的
\uuuu init\uuuu
中初始化父级


要传递给父级的所有参数都必须传递给子级,以便使用
print self>在子级的
\uuu init\uuuu
中初始化父级。配置可能没有执行您认为它正在执行的操作,并且对于说明继承来说是一个糟糕的选择。在第一个示例中,将除赋值语句以外的任何语句放在具有print语句的位置是非常罕见的。您可能正在寻找调用
parent
类的
\uuuu init\uuu()
方法。似乎相关。是的,这是关于访问参数,而不是关于打印。您的链接帮助使用
print self.\u config
很可能没有达到您认为的效果,并且在说明继承方面是一个糟糕的选择。在第一个示例中,将除赋值语句以外的任何语句放在具有print语句的位置是非常罕见的。您可能正在寻找调用
parent
类的
\uuuu init\uuu()
方法。似乎相关。是的,这是关于访问参数,而不是关于打印。您的链接帮助如果我有多个参数,而不仅仅是“config”,我是否需要在super()中全部重写它们?或者有更通用的方法吗?你需要全部通过;子类继承父类的属性;这并不意味着子类定义继承父类定义的语法。如果对您更合适,可以将单个参数转换为列表(例如。*args)。如果我有多个参数,而不仅仅是“config”,是否需要在super()中全部重写它们?或者有更通用的方法吗?你需要全部通过;子类继承父类的属性;这并不意味着子类定义继承父类定义的语法。如果对您更合适的话,可以将单个参数转换为列表(例如*args),这就是我最后使用的代码。不过,我并不完全理解,使用super或父类是否更符合Python的编程方式。当您将父类继承到子类中时,您需要为子类初始化父类以获取父类的特征。因此,当初始化子级时,您要做的第一件事就是通过传递父级所需的参数来初始化父级。这是我最后使用的代码。不过,我并不完全理解,使用super或父类是否更符合Python的编程方式。当您将父类继承到子类中时,您需要为子类初始化父类以获取父类的特征。因此,在初始化子级时,您要做的第一件事就是通过传递父级所需的参数来初始化父级。