对象的继承,super(),子类与父类的参数

#object: 看看对象的继承
#writer: mike
#time: 2020,11,18


#创建一个父类,即便你不写object,它也会默认有object 
class Student(object):
    #定义属性
    def __init__(self,name,time,hour = 0,timeEffective=0):
        self.name = name
        self.time = time
        self.timeEffective = timeEffective
        self.hour = hour
    #定义方法
    def countTime(self,hour,rate):
        self.hour = self.hour + hour
        self.totalEffective = self.hour * rate

#创建一个子类
class Programmer(Student):
    #这个参数是,这个子类独有的参数
    def __init__(self,name):
        #调用父类的方法为我所用,其实子类的属性通过父类的函数定义了,父类的默认参数,我在后面省略了。
        #一定要注意,子类的参数必须满足父类的所有参数,除非,父类的参数有默认参数,即便有的父类的参数子类用不到也必须满足。
        #也就是说,子类把父类的属性,不管有没有用,全都拿了过来
        #再用父类的函数时,就不用加上self了
        super().__init__(name,time=3)

    #可以看出下面这两个参数我并没有初始化,但是它返回的结果是我初始化过得属性
    def count(self,hour,rate):
        super().countTime(hour,rate)


if __name__ == '__main__':
#    one = Student("liming",3)
    two = Programmer("zhangxuan")
    #证明了调用父类方法为我所用。
    print("timeEffective is ",two.timeEffective)
    two.count(10,0.5)
    #原来可以通过方法生成新的属性
    print("two result is ",two.totalEffective)

结果为: 

timeEffective is 0
two result is 5.0

其实,在创建子类的过程中,子类的数据也就是属性在内存中是有分配的,但是子类的方法,如果与父类相同,则会调用父类的方法,不会分配新内存。

原文地址:https://www.cnblogs.com/zijidefengge/p/13998955.html