1. 类的继承
1.1 父类
父类也称基类,其声明方法与一般的类的声明方法一样。父类中存在着一些公共的属性和方法,子类继承于父类。
1.2 子类
子类继承于父类,拥有父类中的属性和方法,它自己也可根据实际情况声明一些属于自己的属性和方法。
子类声明方法:
class subClass(parentClass1,parentClass2,parentClass3,……):
class_suite
- 类名后的括号里填的就是所继承的父类的名称。
例如:
class ParentClass:
static_var = 100
def parentMethod(self):
print("这是父类")
class SubClass(ParentClass):
def subMethod(self):
print("这是子类")
sc = SubClass()
print(sc.static_var)
sc.parentMethod()
sc.subMethod()
print("%s所属的父类为%s" %(sc.__class__,SubClass.__bases__))
输出结果为:
100
这是父类
这是子类
<class '__main__.SubClass'>所属的父类为(<class '__main__.ParentClass'>,)
- 对于任何子类来说,__bases__类是一个包含其父类的集合的元组,对于没有父类的类来说,其__bases__属性值为空。
2. 覆盖方法
在子类继承父类的方法时,若子类需要这个方法具有不同的功能,那么可以通过覆盖(overriding)来重写这个方法。通过继承覆盖方法,也就是在子类里再写一个与父类中一样的方法,实现自己想要实现的功能。
例如:
class Parent:
def sayHello(self):
print("hello,i am class parent")
class Subclass(Parent):
def sayHello(self):
print("hello,i am class subclass")
sc = Subclass()
sc.sayHello()
结果为:
hello,i am class subclass
- Subclass继承了Parent类,但是因为它在类中重写了sayHello(),所以在创建实例后,调用的是重写后的sayHello()。
3. 调用父类方法
在重写了父类中的方法后,也可以调用父类中的被重写方法。这时就是去调用一个未绑定的父类方法。
例如:
Parent.sayHello(sc)
结果为:
hello,i am class parent
- 还可以在子类的重写方法里显示调用。
例如:
class Parent:
def sayHello(self):
print("hello,i am class parent")
class Subclass(Parent):
def sayHello(self):
Parent.sayHello(self)
print("hello,i am class subclass")
sc = Subclass()
sc.sayHello()
结果为:
hello,i am class parent
hello,i am class subclass
- 但是最好的方法是在子类的重写方法里使用super()内建方法。
例如:
class Parent:
def sayHello(self):
print("hello,i am class parent")
class Subclass(Parent):
def sayHello(self):
super(Subclass,self).sayHello()
print("hello,i am class subclass")
sc = Subclass()
sc.sayHello()
结果为:
hello,i am class parent
hello,i am class subclass