Skip to main content
 首页 » 编程设计

python之为多个类创建调用函数

2025年05月04日22zhengyun_ustc

所以我的代码可以正常工作,但是有两行代码让我感到困惑,而且不太确定该放什么。

代码(标出两行):

class Person(object): 
    numPerson = 0 
    def __init__(self,firstName,lastName): 
        self.firstName = firstName 
        self.lastName = lastName 
    def fullName(self): 
        print self.firstName +' '+self.lastName 
 
class Employee(Person): 
    numEmployee = 0 
    def __init__(self,firstName,lastName,pay,employID): 
        Person.__init__(self, firstName, lastName) 
        self.pay = pay 
        self.employID = employID 
        Employee.numEmployee += 1 
 
class Programmer(Employee): 
    def __init__(self,firstName,lastName,pay,employID,proLang): 
        self.proLang = proLang 
        Employee.__init__(self, firstName, lastName, pay, employID) 
 
class Manager(Employee): 
    def __init__(self,firstName,lastName,pay,employID,progList): 
        self.progList = progList 
        Employee.__init__(self, firstName, lastName, pay, employID) 
    def addProgrammer(self): 
        self.progList.append(Programmer.fullName) <------------------- This line 
    def removeProgrammer(self): 
        if len(self.progList) == 0: 
            pass 
        else: 
            del self.progList[0] 
    def printList(self): 
        print self.progList 
 
a = Manager('Alfred','Jones',20.00,0001,[]) 
b = Programmer('James','Smith', 11.75, 0002, 'Java') 
a.addProgrammer() <--------------------------------------------- And This line 
a.printList() 

我正在尝试将程序员的名字添加到 progList使用 .addProgramer方法。我一直在尝试不同的组合,这是我得到的最接近的组合。

输出:

[<unbound method Programmer.fullName>] 

所以,我不确定 addProgramer 中需要包含什么方法以便正确添加程序员姓名,或者如果我需要在 a.addProgrammer 中添加参数在最后。

请您参考如下方法:

这里:

self.progList.append(Programmer.fullName) 

您不是在添加程序员的实例,而是在添加来自程序员类的方法。

还有:

def fullName(self): 
    print self.firstName +' '+self.lastName 

这实际上并没有返回程序员的姓名,它只是将其打印到控制台。要实际输出和使用全名,您需要 return self.firstName + ' ' + self.lastName

同样在该函数中,您还需要指定要添加的程序员:

def addProgrammer(self, added_programmer): 
    self.progList.append(added_programmer.fullName()) # Call the function to get the fullname 

现在添加一个程序员:

Alfred = Manager('Alfred','Jones',20.00,0001,[]) #make a manager      
James = Programmer('James','Smith', 11.75, 0002, 'Java') #make a programmer 
Alfred.addProgrammer(James) #add the programmer 
Alfred.printList() 

把这些放在一起:

class Person(object): 
    numPerson = 0 
    def __init__(self,firstName,lastName): 
        self.firstName = firstName 
        self.lastName = lastName 
    def fullName(self): 
        return self.firstName +' '+self.lastName 
 
class Employee(Person): 
    numEmployee = 0 
    def __init__(self,firstName,lastName,pay,employID): 
        Person.__init__(self, firstName, lastName) 
        self.pay = pay 
        self.employID = employID 
        Employee.numEmployee += 1 
 
class Programmer(Employee): 
    def __init__(self,firstName,lastName,pay,employID,proLang): 
        self.proLang = proLang 
        Employee.__init__(self, firstName, lastName, pay, employID) 
 
class Manager(Employee): 
    def __init__(self,firstName,lastName,pay,employID,progList): 
        self.progList = progList 
        Employee.__init__(self, firstName, lastName, pay, employID) 
    def addProgrammer(self, added_programmer): 
        self.progList.append(added_programmer.fullName()) # Call the function to get the fullname 
    def removeProgrammer(self): 
        if len(self.progList) == 0: 
            pass 
        else: 
            del self.progList[0] 
    def printList(self): 
        print self.progList 
 
Alfred = Manager('Alfred','Jones',20.00,1,[])        
James = Programmer('James','Smith', 11.75, 2, 'Java') 
Alfred.addProgrammer(James) 
Alfred.printList()