python学习(6)-面向对象的三大特征(2)-继承

继承

python中支持多重继承,一个子类可以继承多个直接父类

class 子类类名(父类1[父类2,...])
	类体

object是所有类的父类

class Person:
    def __init__(self, name, age):
        self.name = name
        self.__age = age

    def say_age(self):
        print(self.__age)


class Student(Person):  # 继承person
    def __init__(self, name, age, score):
        Person.__init__(self, name, age)  # 必须显示的调用父类初始化方法,不然解释器不会调用
        self.score = score


s = Student("LiMing", 20, 99)
s.say_age()
# print(s.age)
print(s._Person__age)  # 如果age是私有,可以被继承 只能通过这种方式调用
print(s.score)

方法重写

子类重新定义父类的方法

class Person:
    def __init__(self, name, age):
        self.name = name
        self.__age = age

    def say_age(self):
        print(self.__age)

    def say_name(self):
        print(self.name)


class Student(Person):  # 继承person
    def __init__(self, name, age, score):
        Person.__init__(self, name, age)  # 必须显示的调用父类初始化方法,不然解释器不会调用
        self.score = score

    # 重写学生say_name方法
    def say_name(self):
        print("hi teacher,my name is {0}".format(self.name))


s = Student("LiMing", 20, 99)
s.say_name()

object根类

dir() 查看对象属性


Person继承了object的所有属性

重写__str__()方法

查看对象信息

重写之前

class Person:  # 继承object
    def __init__(self, name):
        self.name = name


s = Person("LiMing")
print(s)

返回值为:<main.Person object at 0x000001D2E2B73B80>

重写之后

class Person:  # 继承object
    def __init__(self, name):
        self.name = name

    def __str__(self):
        return ("name is {0}".format(self.name))


s = Person("LiMing")
print(s)

返回值为:name is LiMing

多重继承

一个子类可以有多个直接父类,但是这样类的层次结构异常复杂,尽量避免使用

mro()

python 支持多继承,如果父类中有相同名字的方法,在子类没有指定父类名时,解释器将从左向右按数据搜索

mro:方法解析顺序

class A:
    def aa(self):
        print("aa")

    def say(self):
        print("aa say")


class B:
    def bb(self):
        print("bb")

    def say(self):
        print("bb say")


class C(B, A):
    def cc(self):
        print("cc")


c=C()
c.aa()
c.bb()
c.cc()
print(C.mro())
c.say()

返回值:
aa
bb
cc
[<class ‘main.C’>, <class ‘main.B’>, <class ‘main.A’>, <class ‘object’>]
bb say

B类在左侧,优先使用B类的方法:

super()获取父类的定义

class A:
    def say(self):
        print("aa say")


class B(A):
    def say(self):
        A.say(self)
        super().say() #与前面效果一致
        print("bb say")
b=B()
b.say()

返回值:
aa say
aa say
bb say

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值