2018-11-30 孙小北

Python入门之类继承和方法重载

Python是一种解释型的、面向对象的、带有动态语义的高级程序设计语言,本节主要总结Python入门类继承和方法重载:继承,多继承,方法重写

继承的概念

继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。派生类的定义如下:

class DerivedClassName(BaseClassName1):

注:圆括号中基类的顺序,若是基类中有相同的方法名,而在子类使用时未指定,python从左至右搜索 即方法在子类中未找到时,从左到右查找基类中是否包含方法。

单继承

class People:
    # 类变量 公共变量
    name = ''
    age = 0
    sex = '男'
    # 类变量 私有变量
    __site = 'www.xiaowangyun.com'

    # 构造函数 专有函数
    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex

    # 公共函数获取私有变量
    def get_site(self):
        print('site:', self.__site)

    # 公共函数speak
    def speak(self):
        print('name:', self.name, ' age:', self.age, ' sex:', self.sex)

    # 私有函数speak
    def __speak(self):
        print('name:', self.name, ' age:', self.age, ' sex:', self.sex)


class Student(People):
    school = ''
    grade = ''

    # 派生类的构造函数
    def __init__(self, name, age, sex, school, grade):
        # 调用父类构造函数
        People.__init__(self, name, age, sex)
        self.school = school
        self.grade = grade

    # 重写父类speak方法
    def speak(self):
        print('I am a student. ', 'name:', self.name, ' age:', self.age, ' sex:', self.sex)


# 实例化
xwy = Student('小望云', 2, '女', 'CUMT', '88')
xwy.speak()
xwy.get_site()
print(xwy.name)

输出

I am a student.  name: 小望云  age: 2  sex: 女

site: www.xiaowangyun.com

小望云

注:1)派生类可以重写父类方法

       2)派生类可以通过父类的公共方法访问父类的私有变量

多继承

接上面代码,继续完成多继承Demo

# Speaker 类
class Speaker():
    topic = ''
    name = ''

    def __init__(self, name, topic):
        self.name = name
        self.topic = topic


# StudentSpeaker 学生演说家 继承Speaker和Student类
class StudentSpeaker(Speaker, Student):
    temp = ''

    def __init__(self, name, temp, age, sex, topic, school, grade):
        Student.__init__(self, name, age, sex, school, grade)
        Speaker.__init__(self, name, topic)


ss = StudentSpeaker('小望云', '小望云', 2, '女', 'Python入门', 'CUMT', '88')
ss.speak()

注:若是基类中有相同的方法名,而在子类使用时未指定,python从左至右搜索 即方法在子类中未找到时,从左到右查找基类中是否包含方法。如:上面ss.speak()调用Speaker父类的方法

方法重写


类的专有方法(方法名前后均有两个下划线)

__init__ : 构造函数,在生成对象时调用

__del__ : 析构函数,释放对象时使用

__repr__ : 打印,转换

__setitem__ : 按照索引赋值

__getitem__: 按照索引获取值

__len__: 获得长度

__cmp__: 比较运算

__call__: 函数调用

__add__: 加运算

__sub__: 减运算

__mul__: 乘运算

__truediv__: 除运算

__mod__: 求余运算

__pow__: 乘方

注:方法名前后均有两个下划线(_)







编辑:孙小北

本文地址: https://www.xiaowangyun.com/wyblog/detail/?id=1027

版权归属: www.xiaowangyun.com   转载时请以链接形式注明出处

0 条评论

快来评论

物以类聚

最新评论

2017-10-06

一辈子不长,只有珍惜了,才不至于后悔。

2017-10-06

懂得感恩,才能走得更远。

标签云

归档

取消

感谢您的支持,您的每一次打赏都是一次鼓励!

扫码支持
每一次支持,都是不懈的动力

打开支付宝扫一扫,即可进行扫码打赏哦