python继承

python--面向对象高级用法

前提是你 提交于 2019-12-18 02:09:32
1. @装饰器 用于拓展原来函数功能的一种函数,这个函数的特殊之处在于它的返回值也是一个函数,使用python装饰器的好处就是在不用更改原函数的代码前提下给函数增加新的功能。 有多个装饰器执行的顺序是从最后一个装饰器开始,执行到第一个,再执行函数本身 def dec1(func): print("1111") def one(): print("2222") func() print("3333") return one def dec2(func): print("aaaa") def two(): print("bbbb") func() print("cccc") return two @dec1 @dec2 def test(): print("test test") test() 结果: 2. @property 与getter setter 描述符 描述符就是一个“绑定行为的对象属性”,在描述符协议中,它可以通过方法充写属性的访问。这些方法有 get (), set (), delete ().如果这些方法中任何一个被定义在一个对象中,这个对象就是一个描述符。 注意,只有在新式类中描述符才会起作用(新式类继承type或者object class) lazyproperty利用是属性访问的查找顺序 例如c.area->c.__dict__['area'] -> type

我的Python自学之路:Python学习路线

不羁的心 提交于 2019-12-17 19:00:44
一、Python学习路线 1. 基础知识 基础知识1:基本规则、Python语言特点、计算机语言、如何运行Python、变量赋值五个方面,辅助你快速掌握Python编程的基底知识。 基础知识2:模块结构、布局、IO编程流程、标识符、Python对象、内存管理、动态类型六大模块,两张基础知识导图可以帮助你区域化了解Python的组成部分及基本操作。 2. 数据类型 学习Python少不了对数据的了解,这张图整理了数据类型的分类、作用、空值、标准数据、if语句等等模块。 3.序列 这张图整理了序列的有序排列、标准操作符与序列类型操作符的重点知识,以及可操作性的BIF。 4.字符串 字符串是个比较庞大而精细的部分,接着上图的BIF可分为标准类型、序列类型、字符串类型,字符串可分为五种操作符类型,此图还整理了序列的独特特性以及编码问题,可以说很详细了。 5. 列表|元素 关于列表|元素,首先说拷贝问题,分深浅拷贝两种形式。tuple的内建函数、特殊特性与list的操作符、内建函数是重点部分。 6. 字典|集合 这张图主要整理了字典|集合中set、dict的功能、分类、BIF、操作问题。 7. 条件|循环 条件|循环包含生成器、迭代器、列表解析的使用、拓展,相关BIF、if语句循环控制也能够快速掌握重点。 8. 文件对象 关于文件对象内建方法、内建函数、内建属性都有具体内容,文件迭代的运用

python基础之组合继承多态

谁都会走 提交于 2019-12-17 11:38:50
组合 1.什么是组合 组合就是一个类的对象具备一个指向另外一个类的对象的属性 2.为何用组合 组合可以减少代码冗余 3.如何使用 class People: def __init__(self,name,age,sex): self.name=name self.age=age self.sex=sex class Course: def __init__(self,name,period,price): self.name=name self.period=period self.price=price def tell_info(self): print('<%s %s %s>' %(self.name,self.period,self.price)) class Teacher(People): def __init__(self,name,age,sex,job_title): People.__init__(self,name,age,sex) self.job_title=job_title self.course=[] self.students=[] class Student(People): def __init__(self,name,age,sex): People.__init__(self,name,age,sex) self.course=[]

Python类定义和类继承详解

自闭症网瘾萝莉.ら 提交于 2019-12-17 09:54:10
类实例化后,可以使用其属性,实际上,创建一个实例之后,可以通过类名访问其属性,如果直接使用类名修改其属性,那么直接影响已经实例化的对象。 类的私有属性: __private_attrs 两个下划线开头,声明该为私有属性,不能在类的外部被使用或者直接访问,在类内部的方法中使用时 self.__private_attrs 类的方法: 在类的内部,使用def关键字可以为类定义一个方法,与一般的函数定义不同,类方法必须包含一个self参数,且为第一个参数。 私有的类方法: __private_method双下划线开头,声明该方法为私有方法,不能在类外部调用,在类的内部调用self.__private_methods 类的专有方法: __init__ 构造方法,在生成对象时调用 __del__ 析构方法,释放对象时调用 __repr__打印,转换 __setitem__ 按照索引赋值 __getitem__ 按照索引获取值 __len__ 获得长度 __cmp__ 比较运算 __call__ 函数调用 __file__ 是用来获得模块所在的路径的,这可能得到的是一个相对路径 __add__加运算 __sub__减运算 __mul__乘运算 __div__除运算 __mod__求余运算 __pow__称方 来源: https://www.cnblogs.com/mosson/p/6899036

Python之旅.第五章.面向对象

时光怂恿深爱的人放手 提交于 2019-12-17 09:29:26
/*--> */ /*--> */ 一、组合 解决类与类之间代码冗余问题有两种解决方案: 1 、继承 2 、组合 1 、继承:描述的是类与类之间,什么是什么的关系 2 、组合:描述的是类与类之间的关系,是一种什么有什么关系;一个类产生的对象,该对象拥有一个属性,这个属性的值是来自于另外一个类的对象 # 组合不属于继承 # 类的使用将变量及处理其的函数捆绑起来 # 继承是强耦合,组合是解耦合 class Date: def __init__(self,year,mon,day): self.year = year self.mon = mon self.day = day def tell_birth(self): print(' 出生年月日 <%s-%s-%s>' % (self.year, self.mon, self.day)) class OldboyPeople: school = 'oldboy' def __init__(self, name, age, sex): self.name = name self.age = age self.sex = sex class OldboyTeacher(OldboyPeople): def __init__(self,name,age,sex,level,salary): super().__init__(name,age

python之二类的继承和多态

蹲街弑〆低调 提交于 2019-12-17 05:59:18
什么是继承 继承可以使得子类具有父类的属性和方法或者重新定义、追加属性和方法等。继承是实现代码的复用,相同的代码不需要重复的写。 class Animal : def eat ( self ) : print ( '吃...' ) def drink ( self ) : print ( '喝...' ) class Cat ( Animal ) : def call ( self ) : print ( '喵喵~' ) kitty = Cat ( ) kitty . eat ( ) ###直接继承父类 kitty . drink ( ) 重写 “”" 继承具有传递性 当父类方法不能满足子类的需求的时候可以对方法进行重写 1.覆盖父类的方法 2.对父类的方法进行扩展super.call( ) “”" 1.对原方法覆盖 class Animal : def eat ( self ) : print ( '吃...' ) def drink ( self ) : print ( '喝...' ) def sleep ( self ) : print ( '睡...' ) class Cat ( Animal ) : def call ( self ) : print ( '喵喵~' ) class HelloKitty ( Cat ) : def sepak ( self ) :

python之super()超继承的使用

。_饼干妹妹 提交于 2019-12-17 05:24:55
超继承什么时候用,子类重写了父类的方法,但是子类还想用之前被重写之前父类的方法,就可以使用超继承。这是一种贪婪的继承。 看下面一段代码,定义了一个数学方法类MathMethod01,又定义了子类的数学方法类MathMethod02,继承了MathMethod01里面的实例属性,并重写了父类的add方法。 上面我子类重写了父类的add方法,按道理说父类的add方法会被覆盖,就不能使用父类的add方法。但是使用super()函数不但可以调用本身的add方法,而且还可以调用父类的add方法,这是一种贪婪的继承。 看调用结果: 来源: https://www.cnblogs.com/xiamaojjie/p/11977151.html

Python中的Class

纵饮孤独 提交于 2019-12-17 04:20:09
尽管Python在Function Programming中有着其他语言难以企及的的优势,但是我们也不要忘了Python也是一门OO语言哦。因此我们关注Python在FP上的优势的同时,还得了解一下Python在OO方面的特性。 要讨论Python的OO特性,了解Python中的Class自然是首当其冲了。在Python中定义class和创建对象实例都很简单,具体代码如下: class MyClass(BaseClassA, BaseClassB): def __init__(self): self.x = 0 self.y = 0 def __init__(self, x, y): self.x = x self.y = y "以上构造函数的用法有误,正确用法请看来自 Qiangning Hong 的 FeedBack " myClass = MyClass() print myClass.x, myClass.y myClass.z = 10 print myClass.z del myClass.x 看完以上的代码,您的心中是不是有很多的问题呢? 好,就让我来一一作答吧。 首先第一点,你会发现Class的定义中有一个括号,这是体现继承的地方。 Java用 extends ,C#、C++用冒号( : ),Python则用括号了。从括号中包含着两个值,聪明的你一定可以发现

python 基础 5.3 类的重写

主宰稳场 提交于 2019-12-17 04:14:54
一. 类的重写 只需要重新定义类的属性(变量),就是累的重写了 示例:重新定义类grandson的 name属性 #/usr/bin/python #coding=utf-8 #@Time :2017/11/6 15:23 #@Auther :liuzhenchuan #@File :类的重写.py class parent( object ): name = 'parent' sex = 'F' coller = 'yellow' language = 'chinese' def __init__ ( self ): print 'my name is {0}' .format( self .name) def get_sex( self ): return self .name a = parent() a.get_sex() print '#' * 15 class child( object ): name = 'child' coller = 'yellow' def __init__ ( self ): print 'my name is {0}' .format( self .name) def get_coller( self ): return self .coller b = child() print b.get_coller() print '#' * 15

Django-CBV和FBV

社会主义新天地 提交于 2019-12-17 02:05:13
知识预览 FBV CBV 回到顶部 FBV FBV(function base views) 就是在视图里使用函数处理请求。 在之前django的学习中,我们一直使用的是这种方式,所以不再赘述。 回到顶部 CBV CBV(class base views) 就是在视图里使用类处理请求。 Python是一个面向对象的编程语言,如果只用函数来开发,有很多面向对象的优点就错失了(继承、封装、多态)。所以Django在后来加入了Class-Based-View。可以让我们用类写View。这样做的优点主要下面两种: 提高了代码的复用性,可以使用面向对象的技术,比如Mixin(多继承) 可以用不同的函数针对不同的HTTP方法处理,而不是通过很多if判断,提高代码可读性 使用class-based views 如果我们要写一个处理GET方法的view,用函数写的话是下面这样。 from django.http import HttpResponse def my_view(request): if request.method == 'GET': return HttpResponse('OK') 如果用class-based view写的话,就是下面这样 from django.http import HttpResponse from django.views import View