Python 元类使用说明

 更新时间:2024年07月01日 14:32:33   投稿:mdxy-dxy  
元类就是类的模板——太形象了了呀,霍霍。

我要一大群的类都具有一中特点,我怎么给他们加上呢?模板模板吗,我从这个模板创建一群类不就OK了?那就需要元类了。霍霍》

定义一个元类(就所一个类的模板!莫多想,还要记住这是类级别的,不是对象级别的!):

复制代码 代码如下:

class MyMeta(type):
def __init__(cls,name,bases,dic):
print cls.__name__
print name
def __str__(cls):return 'Beautiful class %s'%cls.__name__

这是个什么东西?哈,这是个元类。是个类的模板。

它要用在哪里?它要用在一个类里,作为这个类的模板。

起的什么作用?模板,就是提供一些共同的特征。

这个类提供了什么样的特征?两个特征,1。类定义后打印类的名字(__init__)。2。打印类的格式(__str__)。

到底回怎么工作,打开的你的解释器,输入以上的代码,上路:

输入:

class MyClass(object):
__metaclass__ = MyMeta

回车结束类的定义时,输出:
MyClass
MyClass

明白了吧,霍霍!事实证明它确实是初始化一个类,而不是一个对象!!!!!这个是第一个特征。

第二个:

输入:

print MyClass
输出:

Beautiful class MyClass

啊哈,恰如其分,如我们所预料的那样!!!!!!!!当然你可以任意个性化你的类!!

####################################################################################

下面我们来实现一个Singleton模式(来自啄木鸟社区):

Singleton元类:
复制代码 代码如下:

class Singleton(type):
def __init__(cls,name,bases,dic):
super(Singleton,cls).__init__(name,bases,dic)
cls.instance = None
def __call__(cls,*args,**kwargs):
if cls.instance is None:
cls.instance = super(Singleton,cls).__call__(*args,**kwargs)
return cls.instance

非常简单的一个设计模式,相信你能明白是怎么回事!
复制代码 代码如下:

class MyClass(object):
__metaclass__ = Singleton
def __init__(self,arg):
self.arg = arg

使用了Singleton元类的类。

是不是只能有一个实例呢??那只能看看了,实践是检验真理的唯一标准。——精华!!
复制代码 代码如下:

>>> my1 = MyClass("hello")
>>> my2 = MyClass("world")
>>> my1 is my2
True
>>> my1.arg
'hello'
>>> my2.arg
'hello'

我们创建my2的尝试失败了,而这恰恰证明我们成功了。

其实元类用的不多,理解理解。霍霍!!

相关文章

  • python中upper是做什么用的

    python中upper是做什么用的

    在本篇文章里小编给大家整理的是一篇关于python中upper的作用的相关文章,有需要的朋友们可以参考下。
    2020-07-07
  • Python常见数字运算操作实例小结

    Python常见数字运算操作实例小结

    这篇文章主要介绍了Python常见数字运算操作,结合实例形式总结分析了Python数字常见的四则运算、整除、取余、开平方等相关操作技巧与注意事项,需要的朋友可以参考下
    2019-03-03
  • 解决virtualenv -p python3 venv报错的问题

    解决virtualenv -p python3 venv报错的问题

    这篇文章主要介绍了解决virtualenv -p python3 venv报错的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • python使用KNN算法识别手写数字

    python使用KNN算法识别手写数字

    这篇文章主要为大家详细介绍了python使用KNN算法识别手写数字,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-04-04
  • python中的闭包和装饰器的使用示例

    python中的闭包和装饰器的使用示例

    闭包就是能够读取其他函数内部变量的函数,例如在javascript中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数,这篇文章主要介绍了python中的闭包和装饰器的使用,需要的朋友可以参考下
    2022-11-11
  • 使用Python实现文字转语音并生成wav文件的例子

    使用Python实现文字转语音并生成wav文件的例子

    今天小编就为大家分享一篇使用Python实现文字转语音并生成wav文件的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • 使用pyqt 实现重复打开多个相同界面

    使用pyqt 实现重复打开多个相同界面

    今天小编就为大家分享一篇使用pyqt 实现重复打开多个相同界面,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • Python下载网络文本数据到本地内存的四种实现方法示例

    Python下载网络文本数据到本地内存的四种实现方法示例

    这篇文章主要介绍了Python下载网络文本数据到本地内存的四种实现方法,涉及Python网络传输、文本读写、内存I/O、矩阵运算等相关操作技巧,代码中包含了较为详尽的注释说明便于理解,需要的朋友可以参考下
    2018-02-02
  • python and or用法详解

    python and or用法详解

    这篇文章主要介绍了python and or用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-06-06
  • 浅谈Python2之汉字编码为unicode的问题(即类似\xc3\xa4)

    浅谈Python2之汉字编码为unicode的问题(即类似\xc3\xa4)

    今天小编就为大家分享一篇浅谈Python2之汉字编码为unicode的问题(即类似\xc3\xa4),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08

最新评论