Python 如何从超类调用构造函数

Python 如何从超类调用构造函数,python,oop,Python,Oop,如何使用超类中的属性调用构造函数 例: 首先,@MartijnPieters已经指出了一个小的逻辑错误:super的第一个参数应该是当前类: id_code = "test_code" name = "test_name" surname = "test_surname" username = "test_username" password = "test_pass" 为了将它们传递给超类,您需要在子类中接受这些参数。通过硬编码: super(Worker, self).__init__()

如何使用超类中的属性调用构造函数

例:


首先,@MartijnPieters已经指出了一个小的逻辑错误:
super
的第一个参数应该是当前类:

id_code = "test_code"
name = "test_name"
surname = "test_surname"
username = "test_username"
password = "test_pass"
为了将它们传递给超类,您需要在子类中接受这些参数。通过硬编码:

super(Worker, self).__init__()
或者使用
*args
**kwargs
(参见示例:)。但这绝非小事,因为您需要知道哪个类需要哪些参数,顺序应该如何,以及哪些参数是仅位置参数或仅关键字参数,或者您是否希望将它们全部作为位置参数或关键字参数。还可以隐藏参数(-names)

我将坚持硬编码的论点,并且只有当这一点从长远来看是复杂的,考虑切换到“代码> *ARG”,** kWARGS 。

您需要在()/<代码>中命名您自己的类,而不是超级类:<代码> Super(Workor,Sube)。您还需要显式地传入预期参数。
super(Worker, self).__init__()
class User(object):

    def __init__(self, id_code, name, surname):
        self.id_code = id_code
        self.name = name
        self.surname = surname

class Worker(User):

    def __init__(self, id_code, name, surname, username, password, worker_type): # changed
        super(Worker, self).__init__(id_code, name, surname) # changed
        self.username = username
        self.password = password
        self.worker_type = worker_type