2.4python中继承
继承中不要忘了调用super().__init__
def __init__(self,args)
super(subclass,self).__init___(args)
pass
例:
定义一个person类
class Person(object):
def __init__(self, name, gender):
self.name = name
self.gender = gender
定义一个student类,添加额外属性score
class student(person):
def __init__(self,name,gender,score):
super(student,self).__init__(name,gender)
self.score=score
定义一个teacher类,添加额外属性course
class Person(object):
def __init__(self, name, gender):
self.name = name
self.gender = gender
class Teacher(Person):
def __init__(self, name, gender, course):
super(Teacher, self).__init__(name, gender)
self.course = course
t = Teacher('Alice', 'Female', 'English')
print t.name
print t.course
>>>Alice
English
2.5判断类型
函数isinstance()可以判断一个变量的类型,如内置的数据类型:str、list、dict,也可以用我们自定义的类。
例:person、student、teacher的定义和继承关系如下
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
class Teacher(Person):
def __init__(self, name, gender, course):
super(Teacher, self).__init__(name, gender)
self.course = course
p = Person('Tim', 'Male')
s = Student('Bob', 'Male', 88)
t = Teacher('Alice', 'Female', 'English')
>>> isinstance(p, Person)
True
>>> isinstance(p, Student)
False
>>> isinstance(p, Teacher)
False
>>> isinstance(s, Person)
True
>>> isinstance(s, Student)
True
>>> isinstance(s, Teacher)
False
总结:一个父类的实例不能是子类类型,所以子类比父类多一些属性和方法;一个实例可以看成它本身的类型,也可以看成它父类的类型
2.6多态
例:
class Person(object):
def __init__(self, name, gender):
self.name = name
self.gender = gender
def whoAmI(self):
return 'I am a Person, my name is %s' % self.name
class Student(Person):
def __init__(self, name, gender, score):
super(Student, self).__init__(name, gender)
self.score = score
def whoAmI(self):
return 'I am a Student, my name is %s' % self.name
class Teacher(Person):
def __init__(self, name, gender, course):
super(Teacher, self).__init__(name, gender)
self.course = course
def whoAmI(self):
return 'I am a Teacher, my name