1.类方法
关键字:@classmethod
@classmethod
def from_string(cls,date_as_string):
#cls时类方法的关键字,代表调用的类,可能是其子类调用
year,month,day=map(int,date_as_string.splite('-'))
date1=cls(day,month,year)
return date1
2.str
打印类的实例的时候展示的内容
3.静态方法
关键字:@staticmethod
无论谁来调用,都是返回相同的内容
直接通过类来调用即可
4.特殊方法
属性:
getattr setattr delattr_ __getattribute
实例生成/类生成:
init new
数字计算:
add sub mul div pow
调用方法:
str repr len bool
比较大小:
cmp lt le eq ne(不等于) gt ge
集合访问:
setslice getslice getitem setitem contains
迭代器:
iter next
5.继承
通过已有的类来生成新的类,继承父类已有的属性和方法
6.base
追溯父类
7.inspect模块
import inspect
inspect.getmro(class_name)
来查看这个类继承的顺序
mro--method resolution order
在新式类中,继承是广度优先的
8.多重继承
Python支持多重继承,
在新式类中,继承是广度优先的
在经典类中,继承是深度优先的
9.钻石继承
类的多个父类的父类是同一个类。
当调用一个继承方法时,可能会多次执行爷爷类的一个方法多次。
解决:
利用super,super是一个类,不是函数(只在新式类里有)
可以采用super(cls,self).func()的方式来调用父类的方法
10.组合
利用已有的类,生成新的类
将一些类的实例作为参数传入新函数的构造函数
11.多态
多态是不同类的相通方法,相同参数,不同功能。调用时便于将一组对象放在集合里,无需判断对象的具体类型,统一调用。
重载:相通方法的不同参数类型。
里氏代换原则:
父类出现的地方,子类一定可以出现,反之则不一定;
12.元编程
用元类区进行编程的一种方法
生成类的类。
Type(name,bases,sttrs)
name:类名字符串
bases:父类元组
attrs:属性字典
13.type生成元类
格式:type(name,bases,attrs)
#生成元类
A=type('A',(object,),{'b':1})
#这样 就可以让程序帮你产生一个类
#实例化一个对象
a=A()
print A,a.b
14.
元类里面都是类方法
因为元类生成的都是类
用元类生成类可以用关键词:metaclass
class SimpleMeta1(type):
def __init__(cls,name,bases,atts):
super(SimpleMeta1,cls).__init__(name,bases,attr)
cls.test=lambda self:"Yes!This is a test."
class A(Object):
__metaclass__=SimpleMeta1
a=A()