通过type创建类
本文参考资料:
1.Python 中的元编程
2.Python官方文档 type部分
类的命名空间
通过*.__dict__
可以查看对象的命名空间
class ParentClass(object):
p_var1 = "parent"
def __init__(self):
pass
def p_func1(self):
print("parent")
class SomeClass(ParentClass):
"""
this is doc
"""
class_var1 = 1
def __init__(self, name):
self.name = name
self.type = "test"
def func1(self):
print("hello")
以上述代码中的SomeClass类为例
:
>>> SomeClass.__dict__
mappingproxy({
'__module__': '__main__',
'__doc__': '\n\tthis is doc\n\t',
'class_var1': 1,
'__init__': <function SomeClass.__init__ at 0x10faf8730>,
'func1': <function SomeClass.func1 at 0x10faf87b8>
})
>>> s = SomeClass("tom")
>>> s.__dict__
{'name': 'tom', 'type': 'test'}
通过type创建类
type为python内的元类,通过一个参数调用时,会返回对象所属的类,通过三个参数调用时,会创建出类。
其实class ClassName(): 这样我们常用的创建类的语法,不过是type的语法糖
通过type("ClassName", [ParentClass1, ParentClass2], {})
创建类时需要传入三个参数,分别是类名,基类元组,及该类的名称空间字典(所有字段及方法)
若想创建出如下代码的类:
class ParentClass(object):
p_var1 = "parent"
def __init__(self):
pass
def p_func1(self):
print("parent")
class SomeClass(ParentClass):
"""
this is doc
"""
class_var1 = 1
def __init__(self, name):
self.name = name
self.type = "test"
def func1(self):
print("hello")
使用type
语法的方式为:
参考链接
def __init__(self):
pass
def p_func1(self):
print("parent")
ParentClass = type("ParentClass", (), {"__init__": __init__, "p_func1": p_func1})
def __init__1(self, name):
self.name = name
self.type = "test"
def func1(self):
print("hello")
SomeClass = type("SomeClass", (ParentClass,), {"__init__": __init__1, "func1": func1, "class_var1": 1})