通过type创建python类

通过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})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值