我正在使用您的Tube教程学习python的继承,但我不理解一个概念:我已经成为班级员工,子类开发人员和经理。
class Employee:
def __init__(self, first, last, pay):
self.first = first
self.last = last
self.pay = pay
self.email = first + '.' + last + '@gmail.com'
def fullname(self):
fullname = self.first + ' ' + self.last
return print(fullname)
class Developer(Employee):
def __init__(self,first, last, pay, prog_lang):
super().__init__(first,last,pay)
self.prog_lang = prog_lang
class Manager(Employee):
def __init__(self,first, last, pay, employees=None):
super().__init__(first, last, pay)
if employees is None:
self.employees=[]
else:
self.employees = employees
def add_employee(self, emp):
if emp not in self.employees:
self.employees.append(emp)
def remove_employee(self,emp):
if emp in self.employees:
self.employees.remove(emp)
dev1 = Developer('corey','Schafer',8000,'Python')
mngr1 = Manager('kay','sean',9000,[dev1])
现在,我的困惑是,如何将一个子类的实例作为参数提供给其他子类的实例?为什么[dev1]返回名称Corey Schafer?调用时,Corey Schafer就是fullname()的值。...实例dev1是如何实现的?您能解释一下吗?
因此,当您为Developer调用构造函数(创建新实例)时,__init__(self,first, last, pay, prog_lang)
函数将被隐式调用。
如果我们看一下构造函数:
def __init__(self,first, last, pay, prog_lang):
super().__init__(first,last,pay)
self.prog_lang = prog_lang
我们可以看到在第二行调用了超类的构造函数。反过来,这将设置实例的成员变量,这些变量随后在构造全名时将被引用:
def fullname(self):
fullname = self.first + ' ' + self.last
return print(fullname)
更广泛地讲,该语言跟踪哪些变量附加到哪个类上,而python在范围和类型方面特别赋予了程序员很大的自由度。如果您想了解更多有关此主题的信息,我建议您选择W3C's python tutorial,更具体地说是Type safety和Inheritance