Imooc - Python3 进阶教程: Python类的继承
本章讲解Python类的继承,如何判断实例类型,多态以及如何获取对象信息。
Student 继承自 Person 的实现
class Person(object):
def __init__(self, name, gender):
self.name = name
self.gender = gender
class Student(Person):
def __init__(self, name, gender, score):
super(Student, self).__init__(name, gender)
self.score = score
student = Student('Alice', 'girl', 100)
print(student.name) # ==> Alice
print(student.gender) # ==> girl
print(student.score) # ==> 100
调用父类的构造方法
从调用父类构造方法的角度,就有点挫了。
但看了下面的多继承,就明白这里的用法了。
super(Student, self).__init__(name, gender)
类型判断
>>> isinstance(s, Person)
True # s是Person类型
>>> isinstance(s, Student)
True # s是Student类型
>>> isinstance(s, Teacher)
False # s不是Teacher类型
也可以判断自有数据类型
s = 'this is a string.'
n = 10
isinstance(s, int) # ==> False
isinstance(n, str) # ==> False
多重继承
多重继承的目的是从两种继承树中分别选择并继承出子类,以便组合功能使用。
举个例子,Python的网络服务器有TCPServer、UDPServer、UnixStreamServer、UnixDatagramServer,而服务器运行模式有 多进程ForkingMixin 和 多线程ThreadingMixin两种。
class A(object):
def __init__(self, a):
print ('init A...')
self.a = a
class B(A):
def __init__(self, a):
super(B, self).__init__(a)
print ('init B...')
class C(A):
def __init__(self, a):
super(C, self).__init__(a)
print ('init C...')
class D(B, C):
def __init__(self, a):
super(D, self).__init__(a)
print ('init D...')
获取对象的方法
class Person(object):
def __init__(self, name, gender):
self.name = name
self.gender = gender
p = Person("Alice", "Female")
# 获取类型
type(p)
# 获取里面的成员
dir(p)
# 获取/设置属性
getattr(p, 'name') # 获取name属性
setattr(p, 'name', 'Adam') # 设置新的name属性