python面向对象组合类


class Person:
    def __init__(self,name,job=None,pay=0):
        self.name = name
        self.job = job
        self.pay = pay

    def getname(self):
        return self.name.split()[-1]

    def giveraise(self,percent):
        self.pay = round(self.pay * percent,2)

    def __repr__(self):
        return "[Person:{},{}]".format(self.name,self.pay)



class Manager:
    def __init__(self,name,pay):
        self.person = Person(name,"mgr",pay)

    def giveraise(self,percent,bonus=.10):
        self.person.giveraise(percent+bonus)

    def __getattr__(self, attr):
        return getattr(self.person,attr)

    def __repr__(self):
        return str(self.person)

Manager类中构造函数下的 self.person = Person(name,"mgr",pay) 中Person(name,"mgr",pay)是什么意思
self.person.giveraise(percent+bonus)又是什么意思

Person(name,"mgr",pay)就是就是创建一个Person()对象,给它传3个参数:name、job(设置默认值为"mgr")和pay。self.person.giveraise(percent+bonus)这里调用的是Person()对象的giveraise()方法,传的参数值是percent与bonus相加之后的值。大概就是这个意思。你可以调用这些方法运行一下看看效果。

if __name__ == '__main__':
    person = Person('李白', '诗人', 300)
    person.getname()
    person.giveraise(0.5)
    manager = Manager('张三', 180)
    manager.giveraise(0.4)
    print(person)
    print(manager)
# [Person:李白,150.0]
# [Person:张三,90.0]