python 什么时候使用元类
发布网友
发布时间:2022-04-26 21:35
我来回答
共3个回答
热心网友
时间:2022-05-10 05:05
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的尝试失败了,而这恰恰证明我们成功了。
热心网友
时间:2022-05-10 06:23
类是创建实例的 而元类是创建类的
元类的主要作用 就是当创建类时 能够自动地改变类
比方说 在某一个模块里面 所有的类的属性都应该是大写
那么就可以在模块级别设定 __metaclass__
然后这个模块中的所有类都会通过这个元类来创建
只需要告诉这个元类 “把所有的属性都改成大写” 就 ok 了
热心网友
时间:2022-05-10 07:58
当你在类实例化时需要更改类的属性或行为时, 比如: 在类实例化时, 自动添加某个属性
python中的元类是什么,它们用于什么?
1、元类就是创建类的类,通过元类可以在创建类的时候动态地修改类,比如新增方法或属性,从而实现在具体类实例中使用这些方法或属性。2、类是与某个层[1]的对象的最具体的类型。类还可以有运行时表示形式(元对象),它为操作与类相关的元数据提供了运行时支持。支持类的编程语言在支持与类相关的各...
Python-元类及其应用场景
当我们定义一个类时,Python 解释器会先查找该类的元类,然后使用该元类来创建类的对象。元类定义了类的结构,包括类的属性、方法和其他元数据。在类创建过程中,元类会将这些信息存储在类的命名空间中,最终形成类的完整定义。1.单例模式 确保在整个应用程序中只有一个实例,后面文章会介绍 2.orm框...
python中的元类是什么,它们用于什么?
虽然在Python中你可以对元类使用任意可调用对象(例如Jerub演示),但是更好的方法是使其成为实际的类。type是Python中常见的元类。type它本身是一个类,并且是它自己的类型。你将无法type纯粹使用Python 重新创建类似的东西,但是Python有点作弊。要在Python中创建自己的元类,你实际上只想将其子类化type...
Python进阶——什么是元类?
想象一下,当我们定义一个类,其实是在创建一个特殊的对象——类。当我们调用类的构造方法时,实际上是由元类type在幕后操作。元类就是创建所有类的“模板”,用伪代码表示就是:`type(name, bases, dict)`。除了默认由type创建的类,我们还可以通过自定义元类(__metaclass__)实现更灵活的类创建...
Python进阶——详解元类,metaclass的原理和用法
元类可以看作是Python中的类的“类”,它允许我们自定义类的创建过程。与动态使用`type`创建类时相似,元类通过`__new__`方法实现,但形式上有所区别。我们通过一个例子来演示,创建了一个名为`AddInfo`的元类,它继承自`type`,并在`__new__`方法中处理类创建时的参数。当我们创建类`Test`...
Python元类基础知识深度解析
通过继承 type 类定义元类,关键在于实现 __new__ 方法。此方法接收类定义参数,生成类对象。举例说明:MyMeta 作为元类,添加 attr 属性于类 MyClass,实现动态属性赋值,展示了元类的强大。元类适用场景多样,如动态改变类行为、强制 API 一致性。使用时需谨慎,因其复杂性。元类是 Python 的强大...
请问一下什么是元类啊 ?它的具体作用是什么?谢谢您
所谓元类,在 Python(以及其它语言)中,类本身就是可以被传递和自省的对象。既然可以用类作为模板来生成对象,那么用什么作为模板来生成类呢?答案是元类(metaclass)。关于类工厂,不仅实例可以动态的创建,连类也可以动态地创建。元类的功能是强大的,需要考虑元类对于我们的实用性,而且掌握它是有...
关于Python 的经典入门书籍有哪些?
本书介绍了Python应用在各个领域中的一些使用技巧和方法,从最基本的字符、文件序列、字典和排序,到进阶的面向对象编程、数据库和数据持久化、 XML处理和Web编程,再到比较高级和抽象的描述符、装饰器、元类、迭代器和生成器,均有涉及。随着越来越多的人涌入Python开发行列,这在无形中抬高了入行门槛...
如何理解python的类与对象
那么Python里的类和其他的对象有什么区别?实例是对象,因为创建实例的是类.类是对象,创建类的是什么呢?Python给的答案就是元类.你可以通过type()函数来查看它的元类.(type(type)得到的是它自己)其实这个类和其他对象一样,所以我们就不惊讶它为什么有类方法,类变量了.....
Python基础简介
Python的特点和优势体现在其关键字的使用,如模块(文件中包含相关代码的逻辑单元),模块初始化时的__name__属性,以及包(组织模块层次结构的文件夹)。创建模块时,只需顶层定义元素,导入时会引入到当前作用域。在Python中,模块包含函数、类、变量等,通过import、from和as关键字进行导入,以避免命名...