关于python的元组类型,python友元类

  关于python的元组类型,python友元类

  什么是元类?

  在了解元类之前,我们先来了解一下Python中的OOP和Class。

  面向对象s全称是面向对象编程(OOP)的简称,这种编程思想是众所周知的。它以对象为程序的基本单位,将数据和功能封装在其中,能够实现良好的可重用性、灵活性和可扩展性。OOP中有两个基本概念:类和对象:

  是描述如何创建对象的代码段。它用于描述具有相同属性和方法的对象集合。它定义集合中每个对象共享的属性和方法。

  对象是一个类的实例。

  让我们举个例子:

  In:classObjectCreator(对象):

  .通行证

  .

  In:my_object=ObjectCreator()

  In:my_object

  Out : _ _ main _ _。ObjectCreatorat0x1082bef0和Python中的类不限于此:

  In:print(对象创建者)

  类“_ _ main _ _”。对象创建者对象创建者可以是print,所以它的类也是一个对象!因为类是对象,所以您可以动态地创建它们,就像创建任何对象一样。我需要在日常模拟中动态创建类。例如,在模拟数据时,现在有一个接收参数的函数func:

  In:deffunc(实例):

  .print(实例a,实例b)

  . print(instance . method _ a(10))

  .3360.传入的实例在正常使用时符合要求(有属性A和B,有method_a),但当我想单独调试func时,需要“构建”一个。如果我不用元类,我应该这样写3360。

  In:defgenerate_cls(a,b):

  .classFake(object):

  .defmethod_a(self,n):

  .returnn

  .假的

  .假的

  . return false

  .

  In:ins=generate_cls(1,2)()

  In:ins.a,ins.b,ins.method_a(10)

  Out:(1,2,10)你会发现这不算“动态创作”:

  类名(Fake)不方便改变

  要创建的类需要的属性和方法越多,就需要相应的加码,这是不灵活的。

  我通常做什么:

  In:defmethod_a(self,n):

  .returnn

  .

  In:ins=type(Fake ,(),{a:1, b:2, method_a:method_a})()

  In:ins.a,ins.b,ins.method_a(10)

  Out:(1,2,10)在这里,引出了type函数。它最初用于让您了解对象的类型:

  In:type类型(1)

  Out:int

  In:type类型( 1 )

  Out:str

  In:type类型(对象创建者)

  Out:type类型

  In:type(ObjectCreator())

  Out:__main__。ObjectCreator另外,如上所述,type还可以动态创建类:type可以将类的描述作为参数,返回一个类。

  用来创建类的是“元类”

  MyClass=type(MyClass ,(),{})这种用法是因为type实际上是一个元类。作为一个元类,type在Python中用来在后台创建所有的类。Python里有句话叫“一切都是对象”。包、字符串、函数和类.所有这些都是对象。所有这些都由一个类创建:

  In:age年龄=35

  In:age。__class__

  Out:int

  In:name=bob

  In:name。__class__

  Out:str

  .现在,任何__class__中的具体__class__是什么?

  In:age。__class__。__class__

  Out:type类型

  In:name。__class__。__class__

  Out:type类型

  .如果你愿意,你可以称类型为“类工厂”。Type是Python中内置的元类。当然,你也可以创建自己的元类。

  创建自己的元类

  2当Python2创建一个类时,可以添加一个__元类_ _属性:

  classFoo(object):

  __元类_ _=某物.

  [.]如果这样做,Python将使用元类创建Foo类。Python将在类定义中寻找__元类_ _。如果找到它,Python将使用它来创建对象类Foo。如果没有找到,Python将使用type创建这个类。

  在Python3中,语法发生了变化:

  classSimple1(object,元类=something.):

  [.]本质上是一样的。举一个4年前编写和分享的元类的例子(只是推荐你去阅读它

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: