python继承

Day6 - Python基础6 面向对象编程

╄→гoц情女王★ 提交于 2019-12-02 00:01:11
引子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战>的游戏,你就思考呀,人狗作战,那至少需要2个角色,一个是人, 一个是狗,且人和狗都有不同的技能,比如人拿棍打狗, 狗可以咬人,怎么描述这种不同的角色和他们的功能呢? 你搜罗了自己掌握的所有技能,写出了下面的代码来描述这两个角色 1 def person(name,age,sex,job): 2 data = { 3 'name':name, 4 'age':age, 5 'sex':sex, 6 'job':job 7 } 8 9 return data 10 11 def dog(name,dog_type): 12 data = { 13 'name':name, 14 'type':dog_type 15 } 16 return data View Code 上面两个方法相当于造了两个模子,游戏开始,你得生成一个人和狗的实际对象吧,怎么生成呢? 1 d1 = dog("李磊","京巴") 2 3 p1 = person("严帅",36,"F","运维") 4 5 p2 = person("林海峰",27,"F","Teacher") View Code 两个角色对象生成了,狗和人还有不同的功能呀,狗会咬人,人会打狗,对不对? 怎么实现呢,。。想到了, 可以每个功能再写一个函数,想执行哪个功能,直接 调用

Python学习记录8-继承2

大憨熊 提交于 2019-12-01 23:51:33
继承 单继承和多继承 单继承:每个类只能继承一个类 多继承:每个类允许继承多个类 >>> class A(): pass >>> class B(A): pass >>> class C(B,A): pass >>> print(A.__mro__) >>> print(B.__mro__) 输出: (<class '__main__.A'>, <class 'object'>) (<class '__main__.B'>, <class '__main__.A'>, <class 'object'>) # 子类可以直接拥有父类的属性和方法,私有属性和方法除外 >>> class Fish(): def __init__(self, name): self.name = name def swim(self): print('{} can swimming......'.format(self.name)) >>> class Bird(): def __init__(self, name): self.name = name def fly(self): print('{} can fly......'.format(self.name)) >>> class Person(): def __init__(self, name): self.name = name def

【转】python---方法解析顺序MRO(Method Resolution Order)<以及解决类中super方法>

三世轮回 提交于 2019-12-01 23:16:21
【转】python---方法解析顺序MRO(Method Resolution Order)<以及解决类中super方法> MRO了解: 对于支持继承的编程语言来说,其方法(属性)可能定义在当前类,也可能来自于基类,所以在方法调用时就需要对当前类和基类进行搜索以确定方法所在的位置。而搜索的顺序就是所谓的「方法解析顺序」(Method Resolution Order,或MRO)。对于只支持单继承的语言来说,MRO 一般比较简单;而对于 Python 这种支持多继承的语言来说,MRO 就复杂很多。 而具体讨论MRO,我们需要针对不同python版本中的MRO进行解析 经典类:DFS深度优先搜索(Python2.2以前的版本) 新式类:BFS广度优先搜索(Python2.2中提出,在与经典类共存的情况下,是否继承object是他们的区分方式) 新式类C3算法:Python2.3提出(也是现在Python3唯一支持的方式) 对于下面讨论的类的多重继承:我们讨论两种情况。 一:经典类(深度优先搜索) 在经典类中,没有__mro__属性可以去查看MRO的顺序,但是,可以使用inspect模块中getmro方法 import inspect inspect.getmro(类名) (一)正常继承模式 在正常继承模式下,不会引起任何问题 (二)交叉继承模式 缺点 :C类原本是D的子类

04 Python的继承、方法重写、super()类

[亡魂溺海] 提交于 2019-12-01 21:59:26
继承 A类继承B类,A即可获得B类的全部 公共 属性和方法。格式如:class A(B): class Animal: def sleep(self): print("zZZ...") def eat(self): print("yamiyami...") def run(self): print("huchihuchi...") class Dog(Animal): #Dog类拥有sleep,eat,run,bark四个方法 def bark(self): print("汪汪汪")   方法重写 子类有时需要对继承自父类的方法进行修改或重写,这时直接定义一个与需要重写的方法名一样的方法即可,如(接上面的代码): class xiaotianquan(Dog): def fly(self): print("我在飞") #重写继承自父类的bark()方法 def bark(self): print("我在叫!我在叫!")    父类方法扩展 有时仅需对父类方法进行扩展无需完全重写,只需在重写方法时加上super().父类方法 即可: class xiaotianquan(Dog): #扩展继承自父类的bark()方法 def bark(self): #继承父类的方法 super().bark() #此时super()即代表父类(此时的父类为Dog) #需要拓展的代码 print(

Python元类之由浅入深

故事扮演 提交于 2019-12-01 21:38:45
前言 ​ 元类属于python面向对象编程的深层次的魔法,非常重要,它使我们可以更好的掌控类从创建到消亡的整个生命周期过程。很多框架的源码中都使用到了元类。例如 Django Framework 中的 ORM engine. 白类 === 普通的自定义类 什么是元类 面向对象编程最重要的一句话: 一切皆对象 过去我们都 是这样创建类的: class Panda(object): hobby= "study python" def __init__(self, name, age): # initialize self.name = name self.age = age def __str__(self): # format return "My name=%s, age=%s"%(self.name, self.age) 然后再实例化获得 对象 suosuo = Panda("suosuo", 120) print(suosuo) # "My name=suosuo, age=120" print(type(suosuo)) # <class '__main__.Panda'> 都说了一切皆对象,那请问 类:<class '__main__.Panda'> 也该是一个对象吧! 答:没错,创建这个 Panda 类 的 类 我们称之为 元类 , 也就是 这个 Panda

python学习,day5:继承

回眸只為那壹抹淺笑 提交于 2019-12-01 19:32:00
# coding=utf-8 # Author: RyAn Bi class People: def __init__(self,name,age): self.name = name self.age = age def talk(self): print('%s is talking'% self.name) def sleep(self): print('%s is loving sleep'% self.name) class Man(People): #继承 def sleep(self): People.sleep(self) #重构父类 print('%s is sleeping'% self.name) def piao(self): print("%s say hi baby,come on "%self.name) class Woman(People): #继承 def get_birth(self): print('%s is birthing baby '%self.name) m1 = Man('bb',22) m1.sleep() #继承和重构sleep m1.talk() #继承talk m1.piao() #子类的piao w1 = Woman('uu',22) w1.piao() #兄弟类不能继承 来源: https://www.cnblogs

Python学习记录7-继承

霸气de小男生 提交于 2019-12-01 17:09:18
面向对象的三大特性 封装 继承 多态 封装 封装就是对对象的成员进行访问限制 封装的三个级别: 公开,public 受保护的,protected 私有的,private public,private,protected不是关键字 判断对象的位置 对象内部 对象外部 子类中 私有 私有成员是最高级别的封装,只能在当前类或对象中访问 在成员前面添加两个下划线即可 class Person(): # name是公有的成员 name = "小明" # __age是私有的成员 __age = 18 Python的私有不是真私有,是一种称为name mangling的改名策略 可以使用对象,_classname__attributename(_类名__属性名)访问 受保护的封装 protected 受保护的封装是将对象成员进行一定级别的封装,然后,在类中或者子类中都可以进行访问,但是在外部不可以 封装方法:在成员名称前添加一个下划线即可 公开的,公共的 public 公共的封装实际对成员没有人有操作,任何地方都可以访问 继承 继承就是一个类可以获得另外一个类中的成员属性和成员方法 作用:减少代码,增加代码的复用功能,同时可以设置类与类直接的关系 继承与被继承的概念: 被继承的类叫父类,也叫基类,也叫超类 用于继承的类,叫子类,也叫派生类 继承与被继承一定存在一个 is-a 关系 # 继承的语法

python之继承

北城余情 提交于 2019-12-01 17:02:25
继承 什么是继承 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为原始类,新建的类称为新类或子类 首先先创建一个父类 class ParentClass1: #定义父类 pass class ParentClass2: #定义父类 pass class SubClass1(ParentClass1): #单继承,父类是ParentClass1,子类是SubClass pass class SubClass2(ParentClass1,ParentClass2): #python支持多继承,用逗号分隔开多个继承的类 pass 查看继承 >>> SubClass1.__bases__ #__base__只查看从左到右继承的第一个子类,__bases__则是查看所有继承的父类 (<class '__main__.ParentClass1'>,) >>> SubClass2.__bases__ (<class '__main__.ParentClass1'>, <class '__main__.ParentClass2'>) 注:如果没有指定父类,python的类会默认继承object类,object是所有python类的父类,它提供了一些常见方法(如__str__)的实现。 >>> ParentClass1.__bases__ (<class

python之多态

可紊 提交于 2019-12-01 17:02:22
多态 多态与多态性 多态指的是同一种事物的多种状态:水这种事物有多种不同的状态:冰,水蒸气 多态性的概念指出了对象如何通过他们共同的属性和动作来操作及访问,而不需考虑他们具体的类。 冰,水蒸气,都继承于水,它们都有一个同名的方法就是变成云,但是冰.变云(),与水蒸气.变云()是截然不同的过程,虽然调用的方法都一样 就列如动物有多种形态:猫,狗,猪 import abc class Animal(metaclass=abc.ABCMeta): #同一类事物:动物 @abc.abstractmethod def talk(self): pass class cat(Animal): #动物的形态之一:猫 def talk(self): print('say hello') class Dog(Animal): #动物的形态之二:狗 def talk(self): print('say wangwang') class Pig(Animal): #动物的形态之三:猪 def talk(self): print('say aoao') 文件有多种形态:文本文件,可执行文件 import abc class File(metaclass=abc.ABCMeta): #同一类事物:文件 @abc.abstractmethod def click(self): pass class Text

Python接口测试框架实战与自动化进阶 学习 教程

假如想象 提交于 2019-12-01 15:13:07
Python接口测试框架实战与自动化进阶 学习 教程 一、fiddler在工作中的运用 1、如何抓接口  抓紧手机端接口   ①、在电脑终端输入:ipconfig ,找到电脑ip   ②、打开手机,连接WiFi,进入WiFi详情,改用手动代理,将ip设置为电脑端的ip,端口默认(8888)     ③、打开fiddler,找到并打开Fiddler Options ,选择Connections栏,做如下改动:    这样就可以尝试抓取接口了。 注:Python requests中文文档参考: http://docs.python-requests.org/zh_CN/latest/user/quickstart.html 二、unittest使用 python自带的包 1、unittest简单使用 使用unittest的test类:TestCase ,重载相关方法: import unittest class TestMethod(unittest.TestCase): @classmethod def setUpClass(cls): print('重载setUpClass类方法,类实例化(初始化)时调用') @classmethod def tearDownClass(cls): print('重载tearDownClass方法,所有方法执行完后调用') def setUp