继承和多态
class Human(object):
def learn(self):
print('Human is learning')
class Qin(Human): #继承human类
pass
qin = Qin()
qin.learn() #输出结果是'Human is learning',获得human的learn()功能
子类Qin 获得父类Human的功能,即继承
class Qin(Human):
def learn(self):
print('Qin is learning')
#运行结果是'Qin is learning'
子类和父类拥有相同方法时,子类可以覆盖父类的learn()。即多态
我们再定义一个接受Human类型变量的函数,则子类型都可以获得这种方法
def learn_twice(Human):
human.learn()
human.learn()
learn_twice(Qin()) #Qin is learning
#Qin is learning
只要接受Human 类型,都可以在不改动的情况下调用learn_twice方法,先进行子类的learn(),再进行接受Animal类型的learn_twice方法不对子类型加以辨别
获取对象信息
isinstance(xxx, class)
判断xxx是不是 某class 类型
hasattr(obj, 'beauty')对象有beauty属性嘛?
setattr(obj, 'beauty',eye)给对象加上beauty属性 迷人的eye
getattr(obj, 'beauty')获得对象的beauty属性
实例属性和类属性
相同名称时,实例属性会覆盖类属性。若实例属性不存在,则会输出同名类属性。
class Beauty(object):
feature = 'beauty' #给Beauty类添加feature属性
def __init__(self,feature):
self.feature = feature
s = Beauty()
s.feature #因未输入s的feature,故输出Beauty类的feature ‘beauty’
廖雪峰Python习题
为了统计学生人数,可以给Student类增加一个类属性,每创建一个实例,该属性自动增加:
所有实例都共享类属性
class Student(object):
count = 0 #类属性
def __init__(self, name):
self.name = name
Student.count += 1