python之面向对象
python即一门动态的面向对象的语句,面向对象的几个主要概念:
类:就是抽象的模板并不分配内存,封装了类属性和方法(通过类的属性和方法可以完成对其所有的操作)。
实例:就是类创造的具体对象,分配内存。
继承:最原始的是object,创造一个类可以从父类继承来也可以原始创造(object),子类继承了父类所有的属性和方法,同时又有了新的特性。
多重继承:既然类是某种抽象的模板,分类都是从最原始的基类到徒子徒孙的子类的纵向继承关系,但如果采用横向的多重继承则可以快速的生成子类而不需要分成很多级,方法是在(基本父类,横向类1MixIn,横向类1MixIn),多重继承的横向继承都加了后缀MixIn.
多态:子类的实例既有子类的特性又有父类的特性,如果父类和子类有相同的方法,此时父类的方法被隐藏覆盖只体现子类的方法,判断实例属于什么类型可以用type(实例)或者isinstance(实例,类型);要判断实例有那些属性可以用dir(对象);getattr()/hasattr()/setattr()分别用来得到、判断是否有、设置对象的属性。
子类调用父类的方法:super()
封装与隐藏:
弱私有方法:以单个下划线开头,这类方法或属性不能通过 from module_name import *
的方式导入;
强私有方法:私有的方法或属性以双下划线开头,为了防止子类中有同名的方法或者属性。_类名
是用类外访问强私有方法和属性的间接办法。
私有和特殊属性:__XX__两边有2个下划线的属性和方法表示特殊的属性和方法(如构造函数,运算符重载);__XX表示私有变量外部不能随意更改,但是实例._类名._变量也还是能够更改的。
限制实例的属性:__slots__=(“允许的属性1”,“允许的属性2”.。)即不允许动态的添加属性
类方法:@classmethod
标记,传给类的 cls
参数(对比理解:常规方法传给 self
参数);
静态方法:@staticmethod
标记,不接受其它参数。
只读属性:@property:广泛应用在类的定义中,可以让调用者写出简短的代码,同时保证对参数进行必要的检查,这样,程序运行时就减少了出错的可能性
定制类:__str__ :不用print就能返回打印信息(调试方便)
__repr__:返回调试信息(地址,程序开发方便);
_len__ :方法我们也知道是为了能让class作用于len()函数
__iter__ :一个类能够被用于for ... in循环
__getitem__ 向类别一样索引 切片
__getattr__ 动态的属性
__call__:可以直接对实例进行调用,既然某些对象能像函数一样进行调用,如何判断对象是否能被调用呢?用callable(类的实例对象)
枚举类:类实例每个常量都是class的一个唯一实例。Python提供了Enum类来实现这个功能
元类: 很复杂。type()函数既可以返回一个对象的类型,又可以动态地创建出新的类型
类的方法:1 静态方法:@staticmethod
2 实例的属性:通过参数获得实例特有的属性:def __init__(self,para1,para2):
3继承类属性:除了拥有父类的属性(初始化方法先调用父类的初始化方法
:fartherclass.__init__(self,fartherclass
.
para1,fartherclass.
para2)或者super().__init__(fartherclass
.
para1,fartherclass.
para2)//不用self
4 组合类:作为一个参数
)外还有自己的属性。