Python 使用 类 和不匹配变量的多重继承

Python Multiple Inheritance using Classes with non matching variables

如何使用带参数的 class 构造函数在 python 中设置多重继承?我见过很多没有 arg 构造函数的例子,但这并不好玩……我已经用 C++ 完成了这个设置。我正在学习 python 并想我会尝试重新创建相同的设置。

如何让我的 Student_Worker 构造函数在没有所有 *args,*kwargs bs 的情况下工作?

如果覆盖从 PersonStudentWorker 有效,为什么从 StudentWorkerStudent_Worker?

如果菱形案例适用于 classes 而在 4 个构造函数中的任何一个都没有参数,为什么它不能在构造函数中有参数的菱形案例中运行?

我是不是漏掉了一些简单的东西?我到处都找不到像样的向导。

class Person:        #BASE CLASS
    num_of_persons = 0;

    def __init__(self,x,y,z):     
        Person.num_of_persons += 1   
        print("Greetings!")
        self.Name = x
        self.Sex = y
        self.DOB = z
        print("I am " + self.Name)    

    def get_info(self):       
        return '{} {} {}'.format(self.Name,self.Sex,self.DOB)


class Student(Person): #DERIVED CLASS
    def __init__(self, x, y, z, s):
        self.school = s
        return super().__init__(x, y, z)

    def get_info(self):
        return super().get_info() + ' {}'.format(self.school)


class Worker(Person):  #DERIVED CLASS
    def __init__(self, x, y, z, c):
        self.company = c
        return super().__init__(x, y, z)

    def get_info(self):
        return super().get_info() + ' {}'.format(self.company)



class Student_Worker(Student, Worker): #MULTIPLE DERIVED CLASS
    def __init__(self,x,y,z,s,c):
        Student.__init__(x,y,z,c)
        Worker.__init__(c)


p1 = Person("John","M", "1900")
s1 = Student("Sam","F","1910","iSchool")
w1 = Worker("Larry","M","1920","E-SITE")
sw1 = Student_Worker("Brandy","F","1930","iSchool","E-Site")

print(p1.get_info())
print(s1.get_info())
print(w1.get_info())
print(sw1.get_info())

您可以尝试如下创建构造函数:

1) 学生

class Student(Person): #DERIVED CLASS
    def __init__(self, x, y, z, s):
        Person.__init__(self,x, y, z)
        self.school = s

2) 工人

class Worker(Person):  #DERIVED CLASS
    def __init__(self, x, y, z, c):
        Person.__init__(self,x, y, z)
        self.company = c

3) 学生工

class Student_Worker(Student, Worker): #MULTIPLE DERIVED CLASS
    def __init__(self,x,y,z,s,c):
        Student.__init__(self,x,y,z,s)
        Worker.__init__(self,x,y,z,c)

如果您 运行 您的代码,您将得到以下输出:

Greetings!
I am John
Greetings!
I am Sam
Greetings!
I am Larry
Greetings!
I am Brandy
Greetings!
I am Brandy
John M 1900
Sam F 1910 iSchool
Larry M 1920 E-SITE
Brandy F 1930 E-Site iSchool