python面向对象--元类

一个类没有声明自己的元类,默认他的元类就是type,除了使用内置元类type,我们也可以通过继承type来自定义元类,然后使用metaclass关键字参数为一个类指定元类
class Foo:
    def __init__(self):
        pass

f1=Foo()#f1是通过Foo实例化的对象

#print(type(f1))
print(type(Foo))
print(Foo.__dict__)

def __init__(self,name,age):
    self.name=name
    self.age=age

Ffo=type("Ffo",(object,),{‘x‘:1,"__init__":__init__})
print(Ffo)
print(Ffo.__dict__)

f1=Ffo("alex",20)
print(f1.__dict__)
print(f1.name)

#自定制元类
class MyType(type):    def __init__(self,a,b,c):        print("元类的函数执行")        print(self)        # print(a)        # print(b)        # print(c)

#__call__对象后面加括号,触发执行。注:构造方法的执行是由创建对象触发的,即:对象 = 类名() ;而对于 __call__ 方法的执行是由对象后加括号触发的,即:对象() 或者 类()()
    def __call__(self, *args, **kwargs):        print("=======>")        print(args,kwargs)        obj=object.__new__(self)#----->f1生成对象        self.__init__(obj,*args)        return obj

class Foo(metaclass=MyType):# Foo=MyType(4个参数) -->__init__    --->MyType(Foo,‘Foo‘,(object,),{})    def __init__(self,name):        self.name=name

print(Foo)

f1=Foo("alex")#Foo()执行对象的call方法print(f1.name)# print(f1.name)# print(f1.__dict__)

原文地址:https://www.cnblogs.com/tangcode/p/11484297.html

时间: 2024-08-30 07:30:06

python面向对象--元类的相关文章

Python面向对象02/类的空间问题

Python面向对象02/类的空间问题 内容大纲 1.从空间角度研究类 2..类与类之间的关系 1.类的空间问题 1.1何处可以添加对象属性 在类的__init__可以添加,在类的方法也可以添加,在类的外部也可以添加 # class Human: # # mind = '有思想的' # # def __init__(self, name, age): # self.name = name # self.age = age # # def eat(self,argv): # # self.hobb

Python之元类详解

一.引子 元类属于Python面向对象编程的深层魔法,99%的人都不得要领,一些自以为搞明白元类的人其实也是自圆其说,点到为止,从队元类的控制上来看就破绽百出,逻辑混乱: 二.什么是元类 一切源自于一句话:Python中一切皆为对象.让我们先定义一个类,然后逐步分析 #!/usr/bin/env python # -*- coding: utf-8 -*- class MyTeacher(object): school='john' def __init__(self,name,age): se

Python中元类

一. 前提: python中一切都是对象,要么是类的对象,要么是元类的对象,type元类是自己的对象.继承层次表示为type(元类)-->类(内置和用户自定义的) --> 类的实例. 二.  目的: 创建类时自动改变类,换句话说就是创建类这种东西的东西. 三.  __metaclass__ 可以通过指定__metaclass__来使用用户自定义的元类创建类. class语句解析顺序: class Myclass(object): pass Myclass里面的__metaclass__ --&

python 面向对象和类成员和异常处理

python 面向对象 你把自己想象成一个上帝,你要创造一个星球,首先你要把它揉成一个个球,两个直径就能创造一个球 class star: '''名字(name),赤道直径(equatorial diameter),极直径(polar diameter)''' def __init__(self,name,eqDiameter,poDiameter): self.name=name self.eqDiameter=eqDiameter #赤道直径 self.poDiameter=poDiamet

面向对象——元类

1.exec 1 exec(source, globals=None, locals=None, /) 2 Execute the given source in the context of globals and locals. 3 4 The source may be a string representing one or more Python statements 5 or a code object as returned by compile(). 6 The globals

理解python的元类

看了一篇文档,借鉴一下!写下自己对python元类的理解,欢迎各位大神给出意见. 我的理解就是 type用来创建元类,元类用来创建类,类用来创建实例 这样一想,是不是可以认为元类创建类的过程等同于类创建实例,类创建不同的实例,虽然每个实例都有类似的属性,方法,但具体都是不一样的! class Fruits(): def __init__(self,name,color): self.name=name self.color=color def __new__(cls,name,color): r

Python之元类ORM

什么是元类在Python中一切皆对象,类也是一个对象,实例对象由类创建出来的,类是由元类创建出来的.简而言之,用来创建类的类就叫元类(metaclass). 函数type其实就是一个元类,type就是Python在背后用来创建所有类的元类. globals()的作用globals()函数返回的是一个字典,里面保存的是所有当前位置的全部全局变量. type()动态创建类type('类名', (父类,) ,{属性}) 什么是ORM?ORM 即Object Relational Mapping,全称对

Python之元类详细解析

一.补充内置函数isinstance和issubclass 1.isinstance是判断一个对象是不是由一个对象产生的 1 class Foo: 2 pass 3 4 obj=Foo() 5 6 print(isinstance(obj,Foo)) #判断一个对象是否是由某个类调用产生 7 8 # 在python3中统一类与类型的概念 9 d={'x':1} #d=dict({'x':1} #) #类即类型,d是一个对象,dict是一个类,d是由调用dict产生的对象 10 11 print(

【转】Python 之 元类

原文链接: https://stackoverflow.com/questions/100003/what-is-a-metaclass-in-python      http://python.jobbole.com/21351/ 以下代码测试环境为ptyon2.7 类也是对象 在理解元类之前,你需要先掌握Python中的类.Python中类的概念借鉴于Smalltalk,这显得有些奇特.在大多数编程语言中,类就是一组用来描述如何生成一个对象的代码段.在Python中这一点仍然成立: >>&