Python经典类与新式类已经经典继承和新式继承;以及继承顺序_python 经典类 多次访问基类-程序员宅基地

技术标签: 面向对象  Python  

经典类和新式类,以及经典继承和新式继承

# class Animal:   #经典类
class Animal(object):  #新式类
    def __init__(self,name):
        self.name = name
    def eat(self,foot):
        print('can eat',foot)

class Relation(object):
    def make_friends(self,obj):
        print('%s is making friends with %s'%(self.name,obj.name))
class Dog(Animal,Relation): #如果它们都有构造函数,在继承顺序上就会先继承Animal的init构造函数
    # def __init__(self,age):    #这样直接就会覆盖父类的所有构造函数
    #     self.age = age
    #所以要这样
    def __init__(self,name,age):
        # Animal.__init__(self,name) #方法一 经典类的写法
        super(Dog,self).__init__(name) #方法二 这种方法比较好 新式类的写法
        self.age = age
    def run(self):
        print('Dog is run soon')
        print('%d'%self.age)
    # def eat(self):   #直接就将父类方法替换了
    #     print('dog is can eat')
    def eat(self,foot):
        Animal.eat(self,foot)  #这样就可以在父类方法里面添加方法
        print('The dog is can eat')

class Cat(Animal):
    def pashu(self):
        print('cat can pashu %s'%self.name)

dog = Dog('dog',10)
# dog.eat('面包')
# dog.run()

cat = Cat('cat')
# cat.pashu()

# 下面这个就是多继承,注意,这里的cat作为一个参数传进去了
# 其实很好理解
# dog继承了Relation,因此可以多继承
dog.make_friends(cat)

经典类和新式类的继承顺序

#经典类和新式类的继承顺序
class A:
    def __init__(self):
        print('A')
    def __str__(self): #使用之后打印对象时就会有输入
        return 100
class B(A):
    # def __init__(self):
    #     print('B')
    pass
class C(A):
    # def __init__(self):
    #     print('C')
    pass
class D(B,C):
    #这种情况,是先走本身的构造函数,然后根据顺序走其他的:广度优先,横向查找
    #为什么这样说,因为在B,C时没有在向B、C的父类查询,而是作为最后查询
    #和上边的相反的查询就是深度优先,记住Python3都是广度优先,
    #在python2经典类是按深度优先继承的,新式类是按广度优先继承的
    #python3都是按照广度优先继承的,class A: 经典类class A(object):新式类
    # def __init__(self):
    #     print('D')
    pass
# 如果它们都有构造函数,那么构造函数会怎么走
# 测试一下吧
obj = D()
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/haeasringnar/article/details/79978236

智能推荐

软件测试必备技能-程序员宅基地

文章浏览阅读733次,点赞17次,收藏26次。在软件测试领域,以下是一些必备的技能和能力,可以帮助你成为一名优秀的软件测试工程师:

linux音频服务器,mStream - Linux下搭建可随时随地传输音乐的个人流媒体服务器-程序员宅基地

文章浏览阅读753次。mStream是一个免费的、开源的、跨平台的个人音乐流媒体服务器,它可以让你在所有设备之间同步和传输流媒体音乐。它由一个用NodeJS编写的轻量级音乐流媒体服务器,你可以用它把你的音乐从家里的电脑传输到任何地方的任何设备。服务功能适用于Linux、Windows、OSX和Raspbian免费安装很少的内存和CPU使用WebApp功能无缝播放Milkdrop可视化器主题分享通过文件资源管理器上载文件..._音频 服务器

MySQL数据库常用命令行整理(表格)_mysql整理表命令-程序员宅基地

文章浏览阅读2.1k次,点赞4次,收藏26次。用表格的方式清晰地列出了在MySQL使用过程中常用的命令行代码,希望让大家的MySQL学习更轻松!_mysql整理表命令

修改项目文件名大小写,git没有识别并更新_git 修改文件夹大小写不会更新-程序员宅基地

文章浏览阅读487次。修改项目文件名大小写,git没有识别并更新,查看git配置_git 修改文件夹大小写不会更新

minepy安装方法(Windows版本)_minepy.wl-程序员宅基地

文章浏览阅读6k次。之前做大论文实验的时候,需要用到minepy这个Python库,但是pip安装时候报错,让安装c++ 14.0现在推荐一种方法, 去 Unofficial Windows Binaries for Python Extension Packages,即可下载对应的minepy.whl,然后pip install *.whl 即可安装成功。..._minepy.wl

Oracle数据库密码过期,将密码设置永久有效_oracle密码设置无限期-程序员宅基地

文章浏览阅读4.3k次。一般oracle数据库默认profile的密码有效期规则是default,有效期为180天,到期之后的密码就不能使用了,可以通过修改密码有效期或者修改密码后再次使用;以上修改之后,不需要重启服务,会立即生效的。4. 将profile密码有效期设置为永久。_oracle密码设置无限期

随便推点

从零开始的源码开发:搭建同城代驾APP的步骤与注意事项-程序员宅基地

文章浏览阅读186次,点赞8次,收藏3次。时下,同城代驾APP成为了现代生活中不可或缺的一部分。搭建一款高效、安全的同城代驾APP涉及到多方面的技术和注意事项。本文将从零开始,教您如何开发同城代驾APP的源码,同时,我会介绍关键步骤和需要注意的事项。

控制submit为form表单提交_js控制form提交submit-程序员宅基地

文章浏览阅读3.6k次。1.js控制如在测试一个输入框输入的是否为9位数字是可以这样控制,首先判断长度是否为9位在判断是否包含数字,执行else的时候就是为id为form-bossSort-add的form表单作submit提交注意:这个时候要为按钮格式改为button 添加onclick方法function checkRate(){var a = $('#province').val();var r..._js控制form提交submit

eNSP抓包看PPP协议_ensp数据抓包不出来-程序员宅基地

文章浏览阅读2.4k次,点赞2次,收藏22次。PPP 抓包_ensp数据抓包不出来

整数因子分解问题(递归+栈)-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏11次。整数因子分解问题及其扩展问题的解答_整数因子分解问题

【洛谷】P1088.火星人 解题报告-程序员宅基地

文章浏览阅读362次。题目描述人类终于登上了火星的土地并且见到了神秘的火星人。人类和火星人都无法理解对方的语言,但是我们的科学家发明了一种用数字交流的方法。这种交流方法是这样的,首先,火星人把一个非常大的数字告诉人类科学家,科学家破解这个数字的含义后,再把一个很小的数字加到这个大数上面,把结果告诉火星人,作为人类的回答。火星人用一种非常简单的方式来表示数字――掰手指。火星人只有一只手,但这只手上有成千上万的手指...

《C Primer Plus》第八章 — 字符输入输出和输入验证(缓冲区,文件尾,重定向,菜单设计与输入验证,复习题和编程练习带答案)_"while (getchar() != 'y') /* 获取响应,与 y 做对比 */ print-程序员宅基地

文章浏览阅读534次。文章目录字符输入/输出和输入验证本章内容缓冲区结束键盘输入文件、流和键盘输入文件结尾重定向和文件UNIX、Linux和DOS重定向创建更友好的用户界面混合数值和字符输入输入验证菜单浏览复习题编程练习加粗与下面的点是用来标记我的知识盲区,无特殊含义。重定向和文件及之前的点由加粗标记之后的知识应反复学习字符输入/输出和输入验证本章内容本章介绍以下内容:更详细地介绍输入、输出以及缓冲输入和无缓冲输入的区别;如何通过键盘模拟文件结尾条件;如何使用重定向把程序和文件相连接;_"while (getchar() != 'y') /* 获取响应,与 y 做对比 */ printf(\"well, then, is i"

推荐文章

热门文章

相关标签