Python教程:类的派生

一、派生

派生:子类中新定义的属性的这个过程叫做派生,并且需要记住子类在使用派生的属性时始终以自己的为准

1 派生方法一(类调用)

指名道姓访问某一个类的函数:该方式与继承无关

class OldboyPeople:
    """由于学生和老师都是人,因此人都有姓名、年龄、性别"""
    school = 'oldboy'

    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender


class OldboyStudent(OldboyPeople):
    """由于学生类没有独自的__init__()方法,因此不需要声明继承父类的__init__()方法,会自动继承"""

    def choose_course(self):
        print('%s is choosing course' % self.name)


class OldboyTeacher(OldboyPeople):
    """由于老师类有独自的__init__()方法,因此需要声明继承父类的__init__()"""

    def __init__(self, name, age, gender, level):
        OldboyPeople.__init__(self, name, age, gender)
        self.level = level  # 派生

    def score(self, stu_obj, num):
        print('%s is scoring' % self.name)
        stu_obj.score = num


stu1 = OldboyStudent('tank', 18, 'male')
tea1 = OldboyTeacher('nick', 18, 'male', 10)
print(stu1.__dict__)
{'name': 'tank', 'age': 18, 'gender': 'male'}


print(tea1.__dict__)
{'name': 'nick', 'age': 18, 'gender': 'male', 'level': 10}

2 派生方法二(super)

  • 严格以来继承属性查找关系
  • super()会得到一个特殊的对象,该对象就是专门用来访问父类中的属性的(按照继承的关系)
  • super().__init__(不用为self传值)
  • super的完整用法是super(自己的类名,self),在python2中需要写完整,而python3中可以简写为super()
class OldboyPeople:
    school = 'oldboy'

    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex

#学习中遇到问题没人解答?小编创建了一个Python学习交流群:711312441
class OldboyStudent(OldboyPeople):
    def __init__(self, name, age, sex, stu_id):
        # OldboyPeople.__init__(self,name,age,sex)
        # super(OldboyStudent, self).__init__(name, age, sex)
        super().__init__(name, age, sex)
        self.stu_id = stu_id

    def choose_course(self):
        print('%s is choosing course' % self.name)


stu1 = OldboyStudent('tank', 19, 'male', 1)
print(stu1.__dict__)
{'name': 'tank', 'age': 19, 'sex': 'male', 'stu_id': 1}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python教程:类的派生 - Python技术站

(0)
上一篇 2023年3月31日
下一篇 2023年3月31日

相关文章

  • Python教程:如何创建多线程?

    一、python线程的模块 1.thread和threading模块 thread模块提供了基本的线程和锁的支持 threading提供了更高级别、功能更强的线程管理的功能。 2. Queue模块 Queue模块允许用户创建一个可以用于多个线程之间共享数据的队列数据结构。 3.注意模块的选择 避免使用thread模块 因为更高级别的threading模块更为…

    Python开发 2023年4月2日
    00
  • Python中的main方法教程

    估计很多人跟我一样初学python看代码的时候先找一下main()方法,从main往下看。但事实上python中是没有你理解中的“main()”方法的。 言归正传 if name == “main”:可以看成是python程序的入口,就像java中的main()方法,但不完全正确。事实上python程序是从上而下逐行运行的,在.py文件中,除了def后定义函…

    Python开发 2023年3月31日
    00
  • Python3教程:加密模块-hashlib

    一、哈希 1. 什么是可哈希(hashable) 简要的说,可哈希的数据类型,即不可变的数据结构(字符串str、元组tuple、对象集objects)。 2. 哈希有什么作用 它是一个将大体量数据转化为很小数据的过程,甚至可以仅仅是一个数字,以便我们可以用在固定的时间复杂度下查询它,所以,哈希对高效的算法和数据结构很重要。 3. 什么是不可哈希(unhash…

    Python开发 2023年4月2日
    00
  • Python学习:构造函数与析构函数

    1.构造函数: __init__(self), 这个方法就是构造函数,在实例化的时候自动调用。 所有如果这个函数内有打印的方法,当实例出来的时候会打印里面的信息。 __init__方法的第一个参数永远都是self,表示创建实例本身,在__init__方法内部,可以把各种属性绑定到self,因为self指向创建的实例本身。 有了__init__方法,在创建实例…

    Python开发 2023年4月2日
    00
  • Python中5大模块的使用教程(collections模块、time时间模块、random模块、os模块、sys模块)

    1. 模块的简单认识 定义: 模块就是我们把装有特定功能的代码进行归类的结果. 从代码编写的单位来看我们的程序,从小到大的顺序: 一条代码 < 语句块 < 代码块(函数,类) < 模块.我们⽬目前写的所有的py文件都是模块.引入模块的方式: import 模块 from xxx import 模块 2. collections模块 coll…

    Python开发 2023年4月2日
    00
  • Python学习: 网络请求模块 urllib 、requests

    Python 网络请求模块 urllib 、requests Python 给人的印象是抓取网页非常方便,提供这种生产力的,主要依靠的就是 urllib、requests这两个模块。 urlib 介绍 urllib.request 提供了一个 urlopen 函数,来实现获取页面。支持不同的协议、基本验证、cookie、代理等特性。 urllib 有两个版本…

    Python开发 2023年4月2日
    00
  • python中可以处理word文档的模块:docx模块

    一.docx模块 Python可以利用python-docx模块处理word文档,处理方式是面向对象的。也就是说python-docx模块会把word文档,文档中的段落、文本、字体等都看做对象,对对象进行处理就是对word文档的内容处理。 二.相关概念 如果需要读取word文档中的文字(一般来说,程序也只需要认识word文档中的文字信息),需要先了解pyth…

    Python开发 2023年3月31日
    00
  • Python学习:绑定方法与非绑定方法

    一、绑定方法与非绑定方法 类中定义的函数分为两大类:绑定方法和非绑定方法 其中绑定方法又分为绑定到对象的对象方法和绑定到类的类方法。 在类中正常定义的函数默认是绑定到对象的,而为某个函数加上装饰器@classmethod后,该函数就绑定到了类。 我们在之前的章节中已经介绍过对象方法了,本节我们主要介绍类方法。类方法通常用来在__init__的基础上提供额外的…

    Python开发 2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部