日志2/关于元类的想法

在学习崔庆才的代理池维护时,发现他使用了元类,所以进行研究
这篇文章很好的解释了元类的原理。
元类
其实要使用元类,就要搞清楚类是怎么创建的
所有的类都是通过type这个类创建的。
type的用法如下

type(name, bases, attrs)

name: name of the class
bases: tuple of the parent class (for inheritance, can be empty)需要继承的父类
attrs: dictionary containing attributes names and values,需要继承的函数和属性

Foo = type('Foo', (), {'bar':True})

type函数不仅可以找出int,str,class ,还可以用来创建类

print(type(1))
print(type(int))
print(type('yu'))
print(type(str))
class Parent(object):
    pass
print(type(Parent))
print(type(Parent()))
print(type(type(Parent)))
print(type(type))

输出结果如下

<class 'int'>
<class 'type'>
<class 'str'>
<class 'type'>
<class 'type'>
<class '__main__.Parent'>
<class 'type'>
<class 'type'>

从这里我们可以看出不管任何类,他都是继承type类的。简单来说,type类是任何类的祖宗。所以我们在使用元类的时候要有这个想法。

print(hasattr(type,'__new__'))

从这里可以看出type类里面有__new__这个函数,这个函数其实是用来创建类的函数。所以我们想要修改type创建函数的方法,就必须先创建一个元类,也就是继承type类的类。

class METAclass(type):
	def __new__(cls,name, bases, attrs):#和type函数需要传入的参数进行比较。
		pass
	return type.__new__(cls,name, bases, attrs)

class next_class(object, metaclass = METAclass):
	pass

	

这样我们在创建next_class这个类的时候,就会自动采用METAclass中的__new__函数,后面返回一个type.__new__函数,而这个返回的函数就是用来创建next_class类的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值