我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python 面向对象之类的继承

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python 面向对象之类的继承

python中什么是继承:


新类不必从头编写

新类从现有的类继承,就自动拥有了现有类的所有功能

新类只需要编写现有类缺少的新功能

继承的好处:


复用已有代码

自动拥有了现有类的所有功能

只需要编写缺少的新功能

继承的特点:


子类和父类是is关系

python继承的特点:


总是从某个类继承

不要忘记调用super().init


class People(object):
    def __init__(self, name,age):
        self.name = name
        self.age = age

    def eat(self):
        print("%s is eating..." % self.name)

    def talk(self):
        print("%s is talking..." % self.name)

    def sleep(self):
        print("%s is sleeping..." % self.name)

#继承父类
class Man(People):
    pass

m1 = Man("Alin",21)
m1.eat()

执行输出:

Alin is eating...


之类还可以自己定义方法

class People(object):
    def __init__(self, name,age):
        self.name = name
        self.age = age

    def eat(self):
        print("%s is eating..." % self.name)

    def talk(self):
        print("%s is talking..." % self.name)

    def sleep(self):
        print("%s is sleeping..." % self.name)

#继承父类
class Man(People):
    def go_to_work(self):
        print("%s is go_to_work..." % self.name)

m1 = Man("Alin",21)
m1.eat()
m1.go_to_work()

执行输出:

Alin is eating...

Alin is go_to_work...


之类可以定义和父类同名的方法

#继承父类
class Man(People):
    def go_to_work(self):
        print("%s is go_to_work..." % self.name)

    def sleep(self):
        print("Man is sleeping...")

m1 = Man("Alin",21)
m1.eat()
m1.sleep()

执行输出:

Alin is eating...

Man is sleeping...


调用父类方法

#继承父类
class Man(People):
    def go_to_work(self):
        print("%s is go_to_work..." % self.name)

    def sleep(self):
        People.sleep(self)
        print("Man is sleeping...")

m1 = Man("Alin",21)
m1.eat()
m1.sleep()

执行输出:

Alin is eating...

Alin is sleeping...

Man is sleeping...


再写一个类,来继承父类

#继承父类
class Man(People):
    def go_to_work(self):
        print("%s is go_to_work..." % self.name)

    def sleep(self):
        People.sleep(self)
        print("Man is sleeping...")

class WoMan(People):
    def get_birth(self):
        print('%s is born a baby...' % self.name)

m1 = Man("Alin",21)

w1 = WoMan("Rose",26)
w1.get_birth()

执行输出:

Rose is born a baby...


那么Woman是否可以执行Man里面的方法呢?

#继承父类
class Man(People):
    def go_to_work(self):
        print("%s is go_to_work..." % self.name)

    def sleep(self):
        People.sleep(self)
        print("Man is sleeping...")

class WoMan(People):
    def get_birth(self):
        print('%s is born a baby...' % self.name)

m1 = Man("Alin",21)

w1 = WoMan("Rose",26)
w1.get_birth()
w1.go_to_work()

执行报错

AttributeError: 'WoMan' object has no attribute 'go_to_work'


子类之间,是无法直接调用的。


现在有了新的需求,Man在实例化的时候,需要多传一个参数,而Woman保持不变。如果直接修改父类,会影响Woman的实例化。那怎么办呢?

需要在Man里面,自己定义参数。

#继承父类
class Man(People):
    def __init__(self,name,age,money):
        #调用父类的初始化
        People.__init__(self,name,age)
        #单独定义一个变量
        self.money = money
        print("%s 一出生,就有 %s money" % (self.name,self.money))

    def go_to_work(self):
        print("%s is go_to_work..." % self.name)

    def sleep(self):
        People.sleep(self)
        print("Man is sleeping...")

class WoMan(People):
    def get_birth(self):
        print('%s is born a baby...' % self.name)

m1 = Man("Alin",21,10)
m1.eat()

w1 = WoMan("Rose",26)

执行输出:

Alin 一出生,就有 10 money

Alin is eating...


调用父类方法,还有另外一种写法,使用super

#继承父类
class Man(People):
    def __init__(self,name,age,money):
        #调用父类的初始化
        #People.__init__(self,name,age)
        super(Man,self).__init__(name,age) #新式类写法

那么有什么区别呢?没有区别,效果是一样的。既然这样,为什么还要用super。是因为

super不用写父类的类名,如果有一天,父类的类名,改变了,那么这一行代码就不用更改了,只需要更改继承的父类名就可以了。


推荐使用super继承父类


#class People: 经典类
class People(object): #新式类
    def __init__(self, name,age):

新式类,必须要加object

super的写法,也是新式类里面的


经典类和新式类,主要是体现在继承上,有些不同。

class People(object): #新式类
    def __init__(self, name,age):
        self.name = name
        self.age = age

    def eat(self):
        print("%s is eating..." % self.name)

    def talk(self):
        print("%s is talking..." % self.name)

    def sleep(self):
        print("%s is sleeping..." % self.name)

class Relation(object):
    def make_friends(self,obj):
        print("%s is making friends with %s" % (self.name,obj.name))
#多继承
class Man(People,Relation):
    def __init__(self,name,age,money):
        #调用父类的初始化
        #People.__init__(self,name,age)
        super(Man,self).__init__(name,age)
        #单独定义一个变量
        self.money = money
        print("%s 一出生,就有 %s money" % (self.name,self.money))

    def go_to_work(self):
        print("%s is go_to_work..." % self.name)

    def sleep(self):
        People.sleep(self)
        print("Man is sleeping...")

class WoMan(People,Relation):
    def get_birth(self):
        print('%s is born a baby...' % self.name)

m1 = Man("Alin",21,10)
w1 = WoMan("Rose",26)
#执行Relation的方法
m1.make_friends(w1)

执行输出:

Alin 一出生,就有 10 money

Alin is making friends with Rose


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python 面向对象之类的继承

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python 面向对象之类的继承

python中什么是继承:新类不必从头编写新类从现有的类继承,就自动拥有了现有类的所有功能新类只需要编写现有类缺少的新功能继承的好处:复用已有代码自动拥有了现有类的所有功能只需要编写缺少的新功能继承的特点:子类和父类是is关系python继
2023-01-30

Python面向对象——继承

#coding:utf-8"""术语:1、在python3中,自定义创建的类都默认继承了python类中名为object的类2、object类提供的方法,是双下划线开头的,是为了提供给python内部使用3、被继承的类叫做超类,或者叫做父类
2023-01-31

python 面向对象之继承顺序

先来看一个经典类classA:def__init__(self):print(A)classB(A):def__init__(self):print(B)classC(A):def__init__(self):print(C)classD(
2023-01-30

python 面向对象之继承实例讲解

面向对象编程语言具有封装、继承、多态三个基本特征,本文就继承举例详谈比如说学校主要有3大角色:学校,讲师,学员学校可以注册学员,统计有多少学员老师负责讲课学生听课,提问,学习,交学费先定义4个类:classSchool(object):#学
2023-01-30

JavaScript 类与继承:开启面向对象编程之旅

面向对象编程 (OOP) 是软件开发中一种强有力的范例,而 JavaScript 类和继承是其中不可或缺的基础。通过本文,我们将踏上 OOP 之旅,了解 JavaScript 中类的概念及其如何通过继承机制实现代码重用和扩展性。
JavaScript 类与继承:开启面向对象编程之旅
2024-02-15

Java面向对象之继承的概念详解

这篇文章主要介绍了Java面向对象之继承的概念详解,Java是一种面向对象的编程语言,继承是实现面向对象编程的基础之一。通过继承,我们可以使代码更具可读性、可重用性和可维护性,从而提高程序的效率和可靠性,需要的朋友可以参考下
2023-05-18

举例讲解Python面向对象编程中类的继承

python创建一个类很简单只需要定义它就可以了.class Cat:pass就像这样就可以了,通过创建子类我们可以继承他的父类(超类)的方法。这里重新写一下catclass Cat:name = 'cat'class A(Cat):pas
2022-06-04

JavaScript 类与继承:面向对象的终级武器

JavaScript 类与继承是理解面向对象编程 (OOP) 的基础,使开发人员能够创建模块化、可维护和可重用的代码。通过深入了解类和继承,开发人员可以增强他们的 JavaScript 技能并构建强大的应用程序。
JavaScript 类与继承:面向对象的终级武器
2024-02-15

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录