继承允许我们定义一个类,该类继承另一个类的所有方法和属性。父类是被继承的类,也叫做基类。子类是从另一个类继承的类,也叫做派生类。

创建一个父类

任何类都可以成为父类,因此语法与创建任何其他类相同:

示例,创建一个名为 Person 的类,具有 firstname 和 lastname 属性以及一个 printname 方法:

class Person:
def __init__(self, fname, lname):
self.firstname = fname
self.lastname = lname def printname(self):
print(self.firstname, self.lastname)

使用 Person 类创建一个对象,然后执行 printname 方法:

x = Person("John", "Doe")
x.printname()

创建一个子类

要创建一个从另一个类继承功能的类,创建子类时将父类作为参数传递:

示例,创建一个名为 Student 的类,它将继承 Person 类的属性和方法:

class Student(Person):
pass

注意: 当您不希望向类添加任何其他属性或方法时,请使用 pass 关键字。

现在,Student 类具有与 Person 类相同的属性和方法。

示例,使用 Student 类创建一个对象,然后执行 printname 方法:

x = Student("Mike", "Olsen")
x.printname()

添加 init() 函数

到目前为止,我们已经创建了一个从父类继承属性和方法的子类。我们希望在子类中添加 init() 函数(而不是使用 pass 关键字)。

注意: 每次使用类创建新对象时,都会自动调用 init() 函数。

示例,向 Student 类添加 init() 函数:

class Student(Person):
def __init__(self, fname, lname):
# 添加属性等

当您添加 init() 函数时,子类将不再继承父类的 init() 函数。

注意: 子类的 init() 函数会覆盖父类的 init() 函数的继承。

要保留父类的 init() 函数的继承,将调用父类的 init() 函数:

示例:

class Student(Person):
def __init__(self, fname, lname):
Person.__init__(self, fname, lname)

现在,我们已成功添加了 init() 函数,并保留了父类的继承,并准备在 init() 函数中添加功能。

使用 super() 函数

Python 还具有 super() 函数,可以使子类继承其父类的所有方法和属性:

示例:

class Student(Person):
def __init__(self, fname, lname):
super().__init__(fname, lname)

通过使用 super() 函数,您无需使用父元素的名称,它将自动继承其父元素的方法和属性。

添加属性

示例,向 Student 类添加一个名为 graduationyear 的属性:

class Student(Person):
def __init__(self, fname, lname):
super().__init__(fname, lname)
self.graduationyear = 2019

在下面的示例中,2019 年应该是一个变量,并且在创建学生对象时传递给 Student 类。要实现这一点,请在 init() 函数中添加另一个参数:

示例,添加一个 year 参数,并在创建对象时传递正确的年份:

class Student(Person):
def __init__(self, fname, lname, year):
super().__init__(fname, lname)
self.graduationyear = year x = Student("Mike", "Olsen", 2019)

添加方法

示例,向 Student 类添加一个名为 welcome 的方法:

class Student(Person):
def __init__(self, fname, lname, year):
super().__init__(fname, lname)
self.graduationyear = year def welcome(self):
print("Welcome", self.firstname, self.lastname, "to the class of", self.graduationyear)

最后

为了方便其他设备和平台的小伙伴观看往期文章:公众号搜索Let us Coding,或者扫描下方二维码,关注公众号,即可获取最新文章。

看完如果觉得有帮助,欢迎点赞、收藏关注

Python 继承和子类示例:从 Person 到 Student 的演示的更多相关文章

  1. python 继承中的super

    python继承中子类访问父类的方法(包括__init__)主要有两种方法,一种是调用父类的未绑定方法,另一种是使用super(仅仅对于新式类),看下面的两个例子: #coding:utf-8 cla ...

  2. Python父类和子类关系/继承

    #!/usr/bin/env python # -*- coding: utf-8 -*- """ @File:继承_子类和父类的关系.py @E-mail:364942 ...

  3. python继承和多态

    继承 目标 单继承 多继承 面向对象三大特性 封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 中 继承 实现代码的重用,相同的代码不需要重复的编写 多态 不同的对象调用相同的方法,产生不 ...

  4. python 继承与多重继承

    当然,如果不支持python继承,语言特性就不值得称为“类”.派生类定义的语法如下所示: <statement-1> . . . <statement-N> 名称 BaseCl ...

  5. python继承

    Python继承 继承实例: 父类和子类的关系: 继承树: 没有父类就继承object类,不要忘记调用super().__init__来初始化父类 代码: class Person(object): ...

  6. python继承——封装

    python继承--封装 1 为什么要封装 封装数据的主要原因是:保护隐私 封装方法的主要原因是:隔离复杂度 2 封装分为两个层面 第一个层面的封装(什么都不用做):创建类和对象会分别创建二者的名称空 ...

  7. python 继承与组合

    一.组合 #老师 课程 生日 class Course: def __init__(self,name,period,price): self.name = name self.period = pe ...

  8. python开源项目及示例代码

    本页面是俺收集的各种 Python 资源,不定期更新. 下面列出的各种 Python 库/模块/工具,如果名称带超链接,说明是第三方的:否则是 Python 语言内置的. 1 算法 1.1 字符串处理 ...

  9. python开源项目及示例代码(转)

    本页面是俺收集的各种 Python 资源,不定期更新. 下面列出的各种 Python 库/模块/工具,如果名称带超链接,说明是第三方的:否则是 Python 语言内置的. 1 算法 1.1 字符串处理 ...

  10. python selenium 使用unittest 示例

    python selenium 使用unittest 示例 并等待某个元素示例 from selenium.webdriver.support.ui import WebDriverWait from ...

随机推荐

  1. JS中使用Promise.all控制所有的异步请求都完成后,在执行后续逻辑

    使用场景为,在js中连续的几个异步耗时操作,后面的耗时操作需要使用第一个操作的返回结果.例如调用ajax异步接口,需要先创建完主表,然后拿到主表id在去循环创建明细表,等全部创建完成后,弹出提示来,或 ...

  2. 从硅谷到北京,百位AI大咖连续两天集聚讨论AI智能和实践

    全球AI大咖齐聚北京,探讨人工智能前沿!百位AI大咖倾力出席,冲向AI大浪潮! AI从业者和企业家们,一场引领未来的科技盛宴即将在北京掀起!我们荣幸地宣布,第四届"数据智能创新与实践人工智能 ...

  3. subprocess Python执行系统命令最优选模块

    简介 subprocess 是 Python 中执行操作系统级别的命令的模块,所谓系级级别的命令就是如ls /etc/user ifconfig 等和操作系统有关的命令. subprocess 创建子 ...

  4. sudo:pam_open_session Permission denied 与 Too many open files

    sudo:pam_open_session Permission denied 一,验证 sudo 权限失败: /etc/sudoers 文件未给相关用户配置权限. 打开 /etc/sudoers 文 ...

  5. Pandas:获取Dataframe索引

    解决方案 效果图 参考链接 https://blog.csdn.net/YENTERTAINR/article/details/109254583

  6. Numpy,一篇足以

    numpy 用于数值计算 ndarray, 一个有效的多维数组,能提供以数组为导向的快速数值计算和灵活的广播功能(broadcasting) 便利的数学函数 用于读取/写入(reading/writi ...

  7. C#/.NET/.NET Core优秀项目和框架每周精选(坑已挖,欢迎大家踊跃提交PR或者Issues中留言)

    前言 注意:排名不分先后,都是十分优秀的开源项目和框架,每周定期更新分享(欢迎关注公众号:追逐时光者,第一时间获取每周精选分享资讯). 每周精选优秀的C#/.NET/.NET Core项目和框架,帮助 ...

  8. JavaScript迭代协议

    JavaScript迭代协议解读 迭代协议分为可迭代协议和迭代器协议. 协议指约定俗成的一系列规则. 可迭代协议 可迭代协议规定了怎么样算是一个可迭代对象:可迭代对象或其原型链上必须有一个键为[Sym ...

  9. 2、搭建MyBatis

    2.1.开发环境 IDE:idea 2019.2 构建工具:maven 3.8.4 MySQL版本:MySQL 5.7 MyBatis版本:MyBatis 3.5.7 MySQL不同版本的注意事项 ( ...

  10. CodeForces 1367F1 Flying Sort (Easy Version)

    题意 给一个长度为\(n\)的数组,数组中的数互不相同,你可以有两种操作 将某一个数放置在数组开头 将某一个数放置在数组结尾 问最小操作多少次可以得到一个递增数列 分析 因为数组中的数很大,我们可以将 ...