舟山网站建设流程,网站建设ps模板下载,菜鸟学做网站的步骤,wordpress自定义文章标签1 python元类模型和class语句协议
学习python的类型模型和class语句协议。class语句末尾自动调用type()创建类对象并且赋值给类名称。
1.1 类是类型的实例
python3.x中#xff0c;用户定义的类对象是名为type的对象的实例#xff0c;type本身是一个类#xff1b;
python…1 python元类模型和class语句协议
学习python的类型模型和class语句协议。class语句末尾自动调用type()创建类对象并且赋值给类名称。
1.1 类是类型的实例
python3.x中用户定义的类对象是名为type的对象的实例type本身是一个类
python2.x中新式类继承object它是type的一个子类传统类是type的一个实例
type()内置函数返回任何对象的类型。
1.1.1 python3.x
顶层的type对象创建具体的类型具体的类型创建实例。 type([])#list类创建列表实例(具体类创建实例)
class listtype(type([]))#type类创建list类(type类创建具体类)
class typetype(list)
class typetype(type)
class type1.1.2 python2.x
type是一种内置对象位于类型层级的顶层用来构建类型。 type([])
type listtype(type([]))
type typetype(list)
type typetype(type)
type type1.1.3 python3.x自定义类
1 类型由派生自type的类定义
2 用户定义的类是类型类的实例
3 用户定义的类是产生它们自己的实例的类型。 class C1:passtype(C1)
class typetype(C1())
class __main__.C11.1.4 __class__
类是type类的实例类产生自的实例对象。
obj.__class__返回obj所属的类obj可以是实例对象或者类对象。
python3.x class C:pass c1C()type(c1)
class __main__.Cc1.__class__
class __main__.Ctype(C)
class typeC.__class__
class typec1
__main__.C object at 0x00000288F3360A90C
class __main__.Cpython2.x新式类 class C(object):pass c1C()type(c1)
class __main__.Ctype(C)
type typec1.__class__
class __main__.CC.__class__
type typec1
__main__.C object at 0x0000000003F70408C
class __main__.Cpython2.x传统类 class C:pass c1C()type(c1)
type instancetype(C)
type classobjc1.__class__
class __main__.C at 0x00000000037A9AC8C.__class__Traceback (most recent call last):File pyshell#19, line 1, in moduleC.__class__
AttributeError: class C has no attribute __class__1.2 元类是type的子类
python3.x中类是type类的实例。
1 type是产生用户定的类的一个类
2 元类是type类的一个子类
3 类对象是type类的一个实例或一个子类
4 实例对象产生自一个类。
用户定义的类创建子一个用户定义的元类而不是type类来控制创建类及扩展其行为的方式。
1.3 class语句协议
子类化type类以定制它。把一个类的创建指向元类而不是默认的type。
理解class语句如何完成工作。
class语句末尾自动执行type()方法创建类对象赋值给类名。
class type(classname,superclasses,attributedict)
type对象定义__call__运算符重载方法调用type对象时执行下面两个方法
1 type.__new__(typeclass,classname,superclasses,attributedict)
2 type.__init__(class,classname,superclasses,attributedict)
__new__方法创建并返回新的class对象__init__()方法初始化新创建的对象。
type的元类子类定制type的钩子。 class A:pass class B(A):name梯阅线条def meth(self,arg):pass# class 语句末尾自动调用type()产生class 对象
Btype(B,(A,),{name:梯阅线条,meth:meth,__module__:__main__})用法
nametype(name, bases, dict) - a new type描述
手动调用type创建类对象。
name字符串类名
bases元组存放基类
dict类属性字典
返回创建名字为name的类对象类型为type类。
__base__获取类的直接超类组成的元组参考《python命名空间字典》
示例 class ClassB:name梯阅线条ClassB
# 自动调用 type() 创建类对象 赋值给 ClassB
class __main__.ClassBtype(ClassB)
# 类对象类型为 type类 类型
class typetype(ClassB())
# 实例对象类型为 ClassB类 类型
class __main__.ClassBClassB.__bases__
# 基类为 object
(class object,)ClassB.name
# 类属性
梯阅线条等效于 ClassBtype(ClassB,(object,),{__module__:__main__,name:梯阅线条})ClassB
class __main__.ClassBtype(ClassB)
class typetype(ClassB())
class __main__.ClassBClassB.__bases__
(class object,)ClassB.name
梯阅线条