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