python类的继承、封装和多态

python

继承

python;gutter:true;">class Person(object):

def __init__(self, name, gender):

self.name = name

self.gender = gender

class Student(Person):

def __init__(self, name, gender,score): #score属性是子类自己的属性

super(Student,self).__init__(name,gender) #super(子类名称,self).__init__(继承父类的属性1,属性2):初始化父类,继承Person父类的name和gender属性

self.score=score

除了从一个父类继承外,Python允许从多个父类继承,称为多重继承。

多重继承的目的是从两种继承树中分别选择并继承出子类,以便组合功能使用。

#哪类人

class Person(object):

pass

class Student(Person):

pass

class Teacher(Person):

pass

class SkillMixin(object):

pass

#技能类

class BasketballMixin(SkillMixin):

def skill(self):

return 'basketball'

class FootballMixin(SkillMixin):

def skill(self):

return 'football'

#拥有哪种技能的人的类型

class BStudent(Student, BasketballMixin): #既是学生,又会打篮球的人,即继承学生类,也继承篮球技能类,多重继承

pass

class FTeacher(Teacher, FootballMixin):

pass

s = BStudent()

print s.skill()

>>> basketball

t = FTeacher()

print t.skill()

>>> football

多态

class Person(object):

def __init__(self,name):

self.name=name

def a(self): #Person父类的a方法

return 'I am a Person,my name is %s' %self.name

class Student(Person):

def __init__(self,name,age):

super(Student,self).__init__(name)

self.age=age

def a(self): #Student子类的a方法

return 'I am a Student,my name is %s' %self.name

class Teacher(Person):

def __init__(self,name,score):

super(Teacher,self).__init__(name)

self.score=score

def a(self): #Teacher子类的a方法

return 'I am a Teacher,my name is %s' %self.name

def show_a(x): #定义一个方法,用于接收x参数,返回每个类实例对象相对应的方法

print a()

p=Person('Bob')

s=Student('Alice',12)

t=Teacher('Lily',80)

结果:

>>> show_a(p)

I am a Person,my name is Bob

>>> show_a(s)

I am a Student,my name is Alice

>>> show_a(t)

I am a Teacher,my name is Lily

结果返回子类自己的方法,但当子类的方法找不到时会顺着子类找到父类相对应的方法

 封装

将细节封装起来提供一个接口被访问,有效地保证了细节的安全。

class Person(object):

def __init__(self):

self.__name='a'

@property #使用@property将一个方法name变成属性,可以直接.name访问

def name(self): #封装self.__name属性

return self.__name

p1=Person()

p1.name #p1.name可以直接访问name方法

以上是 python类的继承、封装和多态 的全部内容, 来源链接: utcz.com/z/388268.html

回到顶部