Python 面向对象基础(三)--继承

面向对象的几个特性

  • 继承

  • 多态

  • 封装(私有属性、方法)

继承

一个类继承另外一个类时,自动获得被继承类(即父类)的所有方法和属性。同时
子类还可以定义自己的属性和方法。
且父类必须在同一个文件中,或者导入到该项目中。
在Python3.5的版本中只需要

 super(obj.self).__init__(make,model,year) 

  super(obj.self).fun() 

改写父类的方法

如上的init(),当子类调用和父类的同名方法时,,首先调用子类里面的被重写的方法,忽略父类的方法。
#多继承 以普通的类为基础建立专门的类对象
class Animal(object):
    '''父类(基类)'''
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def run(self):
        print('Animal is running...')
    def eat(self):
        print('Animal is eating...')


class Pet:
    def make(self,obj):
        print('%s is making……%s'%(self.name,obj.name) )

class Dog(Animal):
    '''子类(派生类)'''
    def __init__(self,attr_d,name,age):
        '''重构构造函数'''
        super(Dog,self).__init__(name,age)#初始化父类属性
        self.attr_d=attr_d
    def run(self):
        print('dog is running...')

class Cat(Animal,Pet):
    def __init__(self,name,age):
        super(Cat,self).__init__(name,age)
        print('构造函数ing……')

    def run(self):
        '''改写父类方法'''
        super(Cat,self).run()
        print('Cat is running...')



d=Dog('wang……','Kim',22)
d.run()
d.eat()
c=Cat(' Miss',23)
c.run()
c.make(d)

---------
dog is running...
Animal is eating...
构造函数ing……
Animal is running...
Cat is running...
Miss is making……Kim
True

检测是否有继承关系

print(isinstance(d,Dog))
print(isinstance(d,Cat))
print(isinstance(d,Animal))

类继承优先级关系

新式类  class new(object):  广度优先

class A:
    def __init__(self):
        print('A')
class B(A):
    pass
    def __init__(self):
        print('B')
class C(A):
    def __init__(self):
        print('C')
class D(B,C):
    pass
    def __init__(self):
       print('D')

D--->B---->A
------>C---->A

多态

一个接口多种实现

#一种接口。多种实现
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 who_am_i(x):#创建一个接口
    print(x.whoAmI())

p = Person('Tim', 'Male')
s = Student('Bob', 'Male', 88)
t = Teacher('Alice', 'Female', 'English')

who_am_i(p)
who_am_i(s)
who_am_i(t)


----------
I am a Person, my name is Tim
I am a Student, my name is Bob
I am a Person, my name is Alice

 

posted @ 2017-09-14 17:48  Ronny_bin  阅读(82)  评论(0)    收藏  举报