由于在逛博客中看到了相关内容,但是许久不看有些遗忘,故在此记录一番,望温故而知新。
class Parent(object): #无继承则写object
def __init__(self, name, height):
self.name = name
self.height = height
print("create an instance of:", self.__class__.__name__)
#._class_方法将指向该实例对应的类,._name_方法将调用类中的_name_属性。注:_name_属性与parameters:name不是同一个东西
print("name attribute is:", self.name)
print('height attribute is:',self.height)
class Child(Parent): #继承Parent类
# 这里的init是初始化了Child instance,其中输入的parameter可以比父类中需要输入的parameter多
# 但是如果想要利用 比父类多的para,在后面得加上 比如self.x = x进行初始化
def __init__(self,name,height=180,x = 4, weight= 100): #此处函数被重写了,所以要是想要父类原本功能,必须用super函数。直接不写则不会重写此函数。
print("call __init__ from Child class")
# super 里传入的属性要和父类一样
super(Child,self).__init__(name = "data from Child",height = height) #要将子类Child和self传递进去
self.x = x #额外的para,故额外初始化
self.weight = weight
c = Child('wang',50,1,60)
print('name:',c.name)
print('height:',c.height)
输出结果:
call __init__ from Child class
create an instance of: Child
name attribute is: data from Child
height attribute is: 50
name: data from Child #由于初始化过程中,super语句的存在,所以无论name是什么,都只会被赋值为‘data from child’
height: 50
首先子类中init函数重写了,所以不用管父类初始化函数,直接启动子类的初始化_init_函数,先输出call init from Child class。然后,由于使用了super()类调用父类init,所以输出create an instance of这句话。此时的类仍是子类(只不过调用了父类的函数),所以输出的类名仍是子类。而后再输出两个print语句。最后,是对象初始化后的两个额外输出语句。从而,完成整个运行过程。