python学习(七):面向对象(二)
来源:互联网 发布:mac 查看剩余空间 编辑:程序博客网 时间:2024/05/29 08:59
添加方法
- 正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法;
- 还可以尝试给实例绑定一个方法,但是,给一个实例绑定的方法,对另一个实例是不起作用的;
- 为了给所有实例都绑定方法,可以给class绑定方法,给class绑定方法后,所有实例均可调用(需要from types import MethodType)。
限制属性
- 为了达到限制的目的,Python允许在定义class的时候,定义一个特殊的slots变量,来限制该class实例能添加的属性;
- slots定义的属性仅对当前类实例起作用,对继承的子类是不起作用的;
- 除非在子类中也定义slots,这样,子类实例允许定义的属性就是自身的slots加上父类的slots;
- slots本质为一个元组tuple,为类属性。
@property 装饰器
class property(object): """ property(fget=None, fset=None, fdel=None, doc=None) -> property attribute fget is a function to be used for getting an attribute value, and likewise fset is a function for setting, and fdel a function for del'ing, an attribute. Typical use is to define a managed attribute x: class C(object): def getx(self): return self._x def setx(self, value): self._x = value def delx(self): del self._x x = property(getx, setx, delx, "I'm the 'x' property.") Decorators make defining new properties or modifying existing ones easy: class C(object): @property def x(self): "I am the 'x' property." return self._x @x.setter def x(self, value): self._x = value @x.deleter def x(self): del self._x """
- 同一属性的三个函数名要相同;
- 函数property的基本功能就是把类中的方法当作属性来访问;
- 利用property装饰器,让成员函数称为只读的,不定义@x.setter即可;
- @property广泛应用在类的定义中,可以让调用者写出简短的代码,同时保证对参数进行必要的检查,这样,程序运行时就减少了出错的可能性。
类型检查
print(issubclass(bool,int)) print(isinstance(3,int)) print(type([])==list)
type()就是一个最实用又简单的查看数据类型的方法。type()是一个内建的函数,调用它就能够得到一个反回值,从而知道想要查询的对像类型信息,但是不能用于继承中类型的判断,只能用于基本类型的判断。
Python 有两个用于继承的函数:
使用isinstance()来检查实例类型:isinstance(obj, int)只有obj.class是int或者是从int派生的类时才为True。
使用issubclass()来检查类的继承: issubclas(bool, int)是True因为bool是int的子类。然而,issubclass(float, int)为False,因为float不是int的子类。
多重继承
class DerivedClassName(Base1, Base2...MixIn1,MixIn2...): <statement-1> . . . <statement-N>
对于大多数用途,在最简单的情况下,你可以认为继承自父类的属性搜索是从左到右的深度优先搜索,不会在同一个类中搜索两次,即使层次会有重叠。因此,如果在DerivedClassName中找不到属性,它搜索Base1,然后(递归)基类中的Base1,如果没有找到,它会搜索base2,依此类推。通过多重继承,一个子类就可以同时获得多个父类的所有功能。
MixIn的目的就是给一个类增加多个功能,这样,在设计类的时候,我们优先考虑通过多重继承来组合多个MixIn的功能,而不是设计多层次的复杂的继承关系。这样一来,我们不需要复杂而庞大的继承链,只要选择组合不同的类的功能,就可以快速构造出所需的子类。
- 但通常混入 Mixin 的类和 Mixin 类本身不是 is-a 的关系,混入 Mixin 类是为了添加某些(可选的)功能。自由地混入 Mixin 类就可以灵活地为被混入的类添加不同的功能。作为Mixin类,需要满足以下条件:
不能单独生成实例对象,属于抽象类;不能继承Mixin以外的类!
因为有以上限制,Mixin类通常作为功能模块使用,在需要该功能时“混入”,而且不会使类的关系变得复杂(比如,同名方法到底从哪个父类继承)。
0 0
- python学习(七):面向对象(二)
- Python学习笔记(七)--面向对象高级编程
- Python面向对象(二)
- 学习PHP面向对象(七) 多态
- Python学习 面向对象编程(二) 随机序列迭代器
- python的学习(二十)--面向对象编程
- Python学习_面向对象(OOP)二:实现技巧
- Python 学习笔记(二):时间,函数,异常,面向对象
- Python学习系列:面向对象高级编程(二)
- python学习(二)——面向对象
- 面向对象(七)
- (七)面向对象
- 我的php学习笔记(二十)php的面向对象开发(七)
- 黑马程序员-iOS学习日记(七)面向对象-核心语法(二)
- Python面向对象编程(二)
- Python面向对象编程(二)
- Python面向对象编程(二)
- Python面向对象编程(二)
- C++作业2
- iOS开发 - 气泡控制器 IPAD
- Android studio 导入github工程
- WM_PAINT消息
- Hello world!
- python学习(七):面向对象(二)
- 微信公众平台开发(二) 微信公众平台示例代码分析
- ConcurrentHashMap源码剖析
- 文件流的相关操作
- CKEditor与CKFinder学习--CKFinder源码修改自定义上传文件名
- Java day10 IO FileReader,Properties 待补充
- java生成二维码
- 电商干货!1000万烧出来的高点击率钻展创意图十大原则(营销&人性)
- 华为OJ——合唱队