将子类的实例作为参数传递给其他子类

问题描述 投票:-1回答:1

我正在使用您的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是如何实现的?您能解释一下吗?

python inheritance arguments instance subclass
1个回答
0
投票

因此,当您为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 safetyInheritance

© www.soinside.com 2019 - 2024. All rights reserved.