Python中type构造函数参数说明

测试代码如下:

 1 class ModelMetaClass(type):
 2     def __new__(cls,name,base,attrs):
 3         logging.info("cls is:"+str(cls))
 4         logging.info("name is:"+str(name))
 5         logging.info("base is:"+str(base))
 6         logging.info("attrs is:"+str(attrs))
 7         return type.__new__(cls,name,base,attrs)
 8         pass
 9     pass
10
11 class Model(dict):
12     __metaclass__ = ModelMetaClass
13     def __init__(self):
14         pass
15     pass
16
17 def main():
18     m=Model()
19
20 if __name__ == ‘__main__‘:
21     main()

测试结果:

1 INFO:root:cls is:<class ‘__main__.ModelMetaClass‘>
2 INFO:root:name is:Model
3 INFO:root:base is:(<type ‘dict‘>,)
4 INFO:root:attrs is:{‘__module__‘: ‘__main__‘, ‘__metaclass__‘: <class ‘__main__.ModelMetaClass‘>, ‘__init__‘: <function __init__ at 0x025C76F0>}

结论就显而易见了。cls是当前类的名字,即类本身。name是通过__metaclass__属性指向ModelMetaClass的类,即要实例化的类,ModelMetaClass拦截了该类的实例化。base是要实例化的类的基类。attrs是要实例化的类的属性集合。

时间: 2024-10-17 17:57:00

Python中type构造函数参数说明的相关文章

Python中type与Object的区别

Python中type与Object的区别 在查看了Python的API后,总算明白了.现在总结如下: 先来看object的说明: Python中关于object的说明很少,甚至只有一句话: class object The most base type 从介绍上看这也是Python对类型统一做出的努力.所以这里的object与Java的Object类有着异曲同工之妙,而且可以推测这个object很可能就是一个定义了一个类型的"空类" 再来看type的说明: class type(ob

python中的构造函数和构造函数和析构函数的作用

构造函数和构造函数和析构函数都属于python中的特殊方法 其中的"__del__"就是一个析构函数了,当使用del 删除对象时,会调用他本身的析构函数,另外当对象在某个作用域中调用完毕,在跳出其作用域的同时析构函数也会被调用一次,这样可以用来释放内存空间

python中的构造函数和析构函数

python中的特殊方法,其中两个,构造函数和析构函数的作用: 比说“__init__”这个构造函数,具有初始化的作用,也就是当该类被实例化的时候就会执行该函数.那么我们就可以把要先初始化的属性放到这个函数里面.如下程序: 其中的“__del__”就是一个析构函数了,当使用del 删除对象时,会调用他本身的析构函数,另外当对象在某个作用域中调用完毕,在跳出其作用域的同时析构函数也会被调用一次,这样可以用来释放内存空间. 待深入……………………

python中的构造函数

python中构造函数可以这样写 class classname(): def ——init——(self): # 构造函数函数体

Python面试题之Python中type和object的关系

知乎上看到的提问: 两个是互为实例的关系,但不是互为子类的关系,只有type是object的子类,反之则不成立. 大牛说两者是蛋生鸡鸡生蛋的关系,但我还是不明白,有懂的麻烦解释一下, 希望不要给出外文的链接.python为什么设计出两个,去掉一个行不行? 下面是jeff kit的回答: 给别人讲解过很多次,但写成文字是第一次.试一试吧,自己主要也是看了这篇文章(Python Types and Objects)才懂的.object 和 type的关系很像鸡和蛋的关系,先有object还是先有ty

python 中的构造方法

python中的构造函数,一般在构造函数前后使用两个下划线: 有参构造函数: 重写一般方法: 特殊的构造函数(一般用于构造函数被重写,但又需要到基类的构造函数): SongBird类中没有hungry变量,因为SongBird类重写基类Bird中的构造函数,解决方法如下: 使用绑定 使用super函数(super(SongBird,self).__init__()可以以一个普通的绑定方式被调用) 运行结果:

Python中的metaclass

Class也是Object 在理解metaclass之前,我们需要先理解Python中的class.从某种程度上来说,Python中的class的定位比较特殊. 对于大部分面向对象语言来说,class是一段定义了如何产生object的代码块.在Python中这一定义也成立: >>> class example(object): ... pass ... >>> object1 = example() >>> print(object1) <__m

python中super出现的TypeError: must be type, not classobj 原因及解决

执行一下代码,出现错误,TypeError: must be type, not classobj class A():    def __init__(self):        print("Enter A")        print("Leave A") class B(A):    def __init__(self):        print("Enter B")        super(B, self).__init__()  

python中通过元类(TYPE)简单实现对象关系映射(ORM)

ORM是创建一个实例对象,用创建他的类名当做数据表名,用创建他的类属性对应数据表的字段,不需要在自己写复杂的sql语句,而是通过对实例对象的操作时,能让代码自动帮我们整理为对应的sql语句. class User(父类): uid = ("uid", "int unsigned") name = ("username", "varchar(20)") password = ("password", &quo