Python 使用 类 和不匹配变量的多重继承
Python Multiple Inheritance using Classes with non matching variables
如何使用带参数的 class 构造函数在 python 中设置多重继承?我见过很多没有 arg 构造函数的例子,但这并不好玩……我已经用 C++ 完成了这个设置。我正在学习 python 并想我会尝试重新创建相同的设置。
如何让我的 Student_Worker 构造函数在没有所有 *args,*kwargs bs 的情况下工作?
如果覆盖从 Person
到 Student
到 Worker
有效,为什么从 Student
和 Worker
到 Student_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
如何使用带参数的 class 构造函数在 python 中设置多重继承?我见过很多没有 arg 构造函数的例子,但这并不好玩……我已经用 C++ 完成了这个设置。我正在学习 python 并想我会尝试重新创建相同的设置。
如何让我的 Student_Worker 构造函数在没有所有 *args,*kwargs bs 的情况下工作?
如果覆盖从 Person
到 Student
到 Worker
有效,为什么从 Student
和 Worker
到 Student_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