继上一篇学习笔记:python面向对象的继承与多态,本篇就Mixin扩展类的方法写下学习笔记 Mixin Mixin编程是一种开发模式,是一种将多个类中的功能单元的进行组合的利用的方式,这听起来就像是有类的继承机制就可以实现,然而这与传统的类继承有所不同. 通常mixin并不作为任何类的基类,也不关心与什么类一起使用,而是在运行时动态的同其他零散的类一起组合使用. 使用Mixin的好处: 可以在不修改任何源代码的情况下,对已有类进行扩展 可以保证组件的划分 可以根据需要,使用已有的功能进行组合,…
目录: isinstance(obj,cls)和issubclass(sub,super) 反射 __setattr__,__delattr__,__getattr__ 二次加工标准类型(包装) __getattribute__ 描述符(__get__,__set__,__delete__) property __setitem__,__getitem,__delitem__ __str__,__repr__,__format__ __slots__ __next__和__iter__实现迭代器…
isinstance(obj,cls)和issubclass(sub,super) class Person(object): def __init__(self, name, age, sex, nationality): self.name = name self.age = age self.sex = sex self.nationality = nationality def say(self): print("大家好我叫:%s 今年%d岁了,我是一名%s生来自%s." %…
一.反射 1 什么是反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩. 2 python面向对象中的反射:通过字符串的形式操作对象相关的属性.python中的一切事物都是对象(都可以使用反射) 四个可以实现自省的函数 下列方法适用于类和对象(一切皆对象,类本身也是一个对象) 导入其他模块,利用反…
class Dog(Mammal, Runnable): pass 多重继承,继承了不同大类的所有功能,这种设计称之为Mixln,其目的就是给一个类增加多个功能,这样,在设计类的时候,我们优先考虑通过多重继承来组合多个MixIn的功能,而不是设计多层次的复杂的继承关系. 如: class MyTCPServer(TCPServer, ForkingMixIn): pass…
数据封装.继承和多态只是面向对象程序设计中最基础的3个概念.在Python中,面向对象还有很多高级特性,允许我们写出非常强大的功能. 我们会讨论多重继承.定制类.元类等概念.…
## 使用__slots__限制类的属性 - 之前说到,可以通过在类外部实例或者类名任意定义实例属性或者类属性或者方法 class Person(object): pass Person.name = "Stanley" # 在外部添加类属性 print(Person.name) # 输出:Stanley per1 = Person() per1.age = 22 # 在外部添加实例属性 print(per1.age) # 输出:22 per2 = Person() # print(p…
一.isinstance和issubclass type():不会认为子类实例是一种父类类型: isinstance():认为子类实例是一种父类类型. issubclass():判断是否为其子类. class Foo(object): pass class Bar(Foo): pass print(type(Foo()) == Foo) # True print(type(Bar()) == Foo) # False # isinstance参数为对象和类 print(isinstance(Ba…
上文介绍了Python的类成员以及成员修饰符,从而了解到类中有字段.方法和属性三大类成员,并且成员名前如果有两个下划线,则表示该成员是私有成员,私有成员只能由类内部调用.无论人或事物往往都有不按套路出牌的情况,Python的类成员也是如此,存在着一些具有特殊含义的成员,详情如下: 1. __doc__ 表示类的描述信息 1 2 3 4 5 6 7 8 class Foo:     """ 描述类信息,这是用于看片的神奇 """     def f…
正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性.先定义class: >>> class Student(object): ... pass ... >>> 然后尝试给它绑定一个属性: >>> s = Student() >>> s.name = 'BlaskManba' >>> s.age = 20 >>> print…