29.继承丶多态

Python类的继承丶多态


  1. python中什么是继承


 

  • 新类不必从头编写
  • 新类从现有的类继承,就自动拥有了现有类的所有功能
  • 新类只需要编写现有类缺少的新功能

继承的好处:

  • 复用已有代码
  • 自动拥有了现有类的所有功能
  • 只需要编写缺少的新功能
  • 业务拓展性更强

继承的特点:

  • 子类和父类是is关系,继承可以拥有所有父类中的属性

python继承的特点:

  • 总是从某个类继承
  • 不要忘记调用super()._init_()

   2.python中继承一个类:


 语法:列外同时也可以继承多个父类


 

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.gender)
print(t.course)

语法结果:

Alice
Female
English

  

class MIkePart(object):
    log = 'zhang\'s奶茶店'
    def __init__(self,*arg):
        self.attrs = arg
    def eat(self):
        if not self.attrs:
            print('倒闭了')
class Son_MikePart(MIkePart):  #这里一定要把父类写进()里
    pass
m1 = MIkePart('珍珠奶茶','香蕉奶茶','原味奶茶','草莓奶茶')
m2 = Son_MikePart('哈密瓜奶茶','柠檬奶茶')
print(m2.attrs)
m2.eat()
print(Son_MikePart.__bases__)

运行结果:

('哈密瓜奶茶','柠檬奶茶')
(<class '__main__.MIkePart'>,)
  • class.__bases__
    可以查询出当前类的父类
  • super(class,self).__init__()

    找到当前super函数第一个参数的父类,用它的init函数先初始化数据,然后再自己添加自己的数据

1,

class MIkePart(object):
    log = 'zhang\'s奶茶店'
    def __init__(self,*arg):
        self.attrs = arg
        self.name = '小张'
        self.sex = 'woman'
    def eat(self):
        if not self.attrs:
            print('倒闭了')
class Son_MikePart(MIkePart):   #子类(父类)
    def __init__(self,*arg):#赋值函数
        super(Son_MikePart,self).__init__(*arg)
        #找到指定的父类
        self.phone = 'iphone6'
    def eat(self):                     #继承eat函数可以进行修改重写
        if  self.attrs:
            print('可以边吃边健身')
        else:
            print('败光了,已经倒闭了')
    def drink(self):           #不光可以继承原来的功能还能编写缺少的功能让其变得更强大
        self.attrs = '喝光了,剩下固体了,还可以卖点破烂钱从头再来'
        print(self.attrs)

m1 = MIkePart('珍珠奶茶','香蕉奶茶','原味奶茶','草莓奶茶','哈密瓜奶茶','柠檬奶茶')
print(m1.attrs,m1.name,m1.sex)
m2 = Son_MikePart('哈密瓜奶茶','柠檬奶茶')
print(m2.attrs,m2.name,m2.sex,m2.phone)
m2.eat()
m2.drink()
print(Son_MikePart.__bases__)

运行结果:

('珍珠奶茶', '香蕉奶茶', '原味奶茶', '草莓奶茶', '哈密瓜奶茶', '柠檬奶茶') 小张 woman
('哈密瓜奶茶', '柠檬奶茶') 小张 woman iphone6
可以边吃边健身
喝光了,剩下固体了,还可以卖点破烂钱从头再来
(<class '__main__.MIkePart'>,)

2,

class A(object):
    def __init__(self,type):
        self.cpu = '联发科'
        self.mem = 16
        self.system = 'ios'
        self.size = 32
        self.type = type
    def play_game(self):
        self.mem -=3
        print('当前剩余内存是:%s' % self.mem)
    def call(self):
        print('正在打电话,用的是%s' % self.type)
    def show(self):
        print('当前手机是屏幕大小为:%s' % self.size)
a=A('ios')
a.call()
a.play_game()
a.show()

class B(A):
    def __init__(self,type):
        super(B,self).__init__(type)
        self.mem -=3
        self.size = 35
b = B('安卓')
b.call()
b.play_game()
b.show()

运行结果:

正在打电话,用的是ios
当前剩余内存是:13
当前手机是屏幕大小为:32
正在打电话,用的是安卓
当前剩余内存是:10
当前手机是屏幕大小为:35

  3. python中判断类型

    函数isinstance()可以判断一个变量的类型,既可以用在Python内置的数据类型如str、list、dict,也可以用在我们自定义的类,它们本质上都是数据类型。

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

t = Teacher('Alice', 'Female', 'English')

print(isinstance(t, Person))       #判断当前实例是否属于这个类的
print(isinstance(t, Student))
print(isinstance(t, Teacher))
print(isinstance(t, object))

运行结果:

True
False
True
Tru

  4.python中多态


 

  • 什么是多态

  1. 同一件事,不同情况,不同处理,就是多态
  2. 来自继承
  •  怎么实现继承:
    • 父类被子类继承
    • 子类重写父类已有同名函数
    • 子类调用这个同名函数
class A(object):
    def func(self):
        print('我的A的函数')
class B(A):
    def func(self):
        print('我修改的是A类函数,但是我是B类')
a = A()
b = B()
def work(A):
    #只接受A的实例
    A.func()
work(a)
work(b)

运行结果:

我的A的函数
我修改的是A类函数,但是我是B类

 

posted on 2018-11-30 14:45  走路带风的帅界扛把子  阅读(159)  评论(0编辑  收藏  举报