python|面向对象-5|类是如何被创建的|初探元类

简介: python|面向对象-5|类是如何被创建的|初探元类

什么是元类


python中,元类的关键字是metaclass,翻译过来就是【元类】,元类可以用来控制类的创建过程,可以定义类的结构、属性和方法。


哎,你是不是感觉很熟悉呢? 因为我们之前的文章在介绍类继承和多态的时候提及过,上述功能继承也能实现,那为什么还需要元类呢?


python中,元类对类的创建过程可以进行更加细粒度的控制和定制,甚至于可以根据类的名称、属性值等,生成动态代码,这是继承无法比拟的。



类是如何被创建的


要搞清楚元类,我们首先要清楚,类是如何被创建的,我们一直使用的是传统的创建语法,例如:

class className():
    def func(self,key,value):
        return key,value
c = className()
print(c.func("1","2"))

上述代码,我们创建了一个类,名字为className,而后再创建了一个实例c,使用c.func()来调用类方法。最后结果是输出我们传入的值,如下:

image.png


除此之外,我们还可以使用type函数来创建类,例如如上代码,可以修改为:

classFunc = {
    'func': lambda self,x,y: (x , y)
}
className = type('className', (), classFunc)
c = className()
print(c.func("1","2"))

在上述代码中,我们使用type函数创建了一个名为className,属性中包含一个方法func,该方法接收三个参数selfx以及y,该方法的返回值是x,y


我们执行后,结果如下:

image.png



元类如何创建


python中,一切皆对象,所以我们可以使用type来创建一个类,这里会引出下面关于type类的话题,注意一下哦,type()是一个内置函数,用于获取对象的类型,或者创建一个新的类对象。但是typepython中的一个类,我们称之为元类,例如如下代码:


class classMeta(type):
    pass
class className(metaclass=classMeta):
    pass
c = className()

上述代码,我们将创建一个类classMeta,它将继承type类,而后我们定义类className,我们将这个类的元类设置为classMeta。最后再通过className实例化一个类对象c


上述就是我们元类的创建过程了,为什么我们不直接使用classMeta呢?如果直接使用,那我们先修改代码如下:

class classMeta(type):
    pass
c = classMeta()

若我们执行后,会报错如下:

image.png


这是因为classMeta继承于type,而它本身就是一个元类,是用来创建其他类的,所以不能被实例化为一个类对象。


如果这么说,还不明白的话,我们可以来打印一下2个类的值,修改代码如下:

class classMeta(type):
    pass
class className(metaclass=classMeta):
    pass
print("classMeta 类型为: ",type(classMeta))
print("className 类型为:",type(className))

结果如下:

image.png

可以看到,一个是类型是type,一个类型是我们创建的元类,所以说,直接调用type会失败。



总结


本篇文章,介绍了什么是元类,以及元类的作用,而后单独介绍了类是如何被创建的,python关键字可有点操蛋啊,对初学者而言,感觉非常不好,type关键字,有双层含义:


  • 内置方法使用: 会获取对象的类型,或者是创建一个类。
  • 关键字使用: 它则代表一个元类。

所以第二段落,我们讲述了类是如何被创建的,主要介绍了使用class方式和type()2种方法,目的是探究类是如何被创建的,还有获取type的用法,最后我们介绍了如何创建元类以及获取元类和类的类型。


如何定制化元类,我们将在下一篇开始介绍。





相关文章
|
开发者 Python
Python中的元类深度剖析与实战应用
Python中的元类深度剖析与实战应用
270 0
|
关系型数据库 MySQL Java
Python中的元类(metaclass)
Python中的元类(metaclass)
|
设计模式 存储 数据库连接
Python设计模式:巧用元类创建单例模式!
Python设计模式:巧用元类创建单例模式!
354 0
|
Python
告别平庸!Python元类:让你的代码设计思想跃升至新高度
【7月更文挑战第7天】Python的元类是创建类的类,用于在定义时定制类的行为。通过元类,可以在类创建时注入逻辑,比如添加方法或改变属性。例如,一个元类可以自动为所有类添加日志功能。元类应用广泛,如自动注册类、修改属性、实现单例模式和动态添加方法,提升代码设计的灵活性和效率。掌握元类,让代码设计超越常规。
245 1
|
开发者 Python
元类,Python中的隐藏BOSS?掌握它,让你的编程之路畅通无阻
【7月更文挑战第7天】Python的元类是创建类的类,如同编程的“大BOSS”。它们让开发者在类创建时干预过程,添加功能,如自动注册、修改属性。元类通过`__new__`方法动态创建类,如示例中MetaClass得到Meta元类附加的属性。虽然使用需谨慎,以免增加复杂性,但元类提供了超越常规类的强大力量,解锁高级编程技术。
267 2
|
开发者 Python
Python元类实战:打造你的专属编程魔法,让代码随心所欲变化
【7月更文挑战第7天】Python的元类是编程的变形师,用于创建类的“类”,赋予代码在构建时的变形能力。
219 1
|
Python
从入门到精通,Python元类:让你的代码拥有自我进化的超能力
【7月更文挑战第7天】元类是Python中类的类,用于定义类的创建和行为。它们允许在创建类时动态修改,常用于注册、属性修改或实现单例。要使用元类,需定义继承`type`的类,重写`__new__`或`__init__`。例如,一个简单的元类能自动给新类添加属性。虽然初学者会感到挑战,但通过实践能揭示其潜力,赋予代码超凡的灵活性。**
277 0
|
设计模式 存储 Python
Python元类大揭秘:从理解到应用,一步步构建你的编程帝国
【7月更文挑战第6天】Python元类是创建类的对象的基石,允许控制类的生成过程。通过自定义元类,可在类定义时动态添加方法或改变行为。
293 0
|
设计模式 开发者 Python
惊呆了!Python元类竟能如此玩转,你的编程世界将不再有界限
【7月更文挑战第6天】Python元类是类的类,用于控制类的创建。它们让开发者能自定义类的行为,如添加方法、改变继承或实例化过程。例如,定义一个元类`my_metaclass`,它会在创建类时自动添加新方法。元类广泛应用在单例、插件系统和ORM等高级场景,拓展了Python代码的灵活性和威力。掌握元类,揭开编程魔法的面纱,为代码解锁更多可能。
176 0
|
设计模式 Python
深度揭秘!Python元类:掌握它,让你的代码拥有创造类的能力
【7月更文挑战第6天】Python元类探秘:**元类是类的类,用于控制类的创建。通过定义元类,可自定义类的行为,如动态添加方法或改变继承结构。示例中,`my_metaclass`在创建类时添加`new_method`。元类强大且适用于高级编程,如动态修改、注册类或实现设计模式。理解并善用元类能提升Python编程技巧。
278 0

推荐镜像

更多