python元类

在python中基于类可以创建对象

复制代码
# 定义类
class Foo(object):
  
  def __init__(self.name):
    self.name = name
    
  def __new__(cls,*args,**kwargs):
    data = object.__new__(cls)
    return data
    
# 根据类创建对象,分两步
# 1. 在内部执行new方法,创建一个空对象 {}
# 2. 之后执行类的init方法,初始化对象。{"name":"xiao"}
# 注意“:new方法称为构造方法,init方法称为初始化方法
obj = Foo("xiao")
复制代码

  

对像-----------基于类实现的

类 ------------基于啥实现的????

复制代码
类 默认是有type创建的
def do(self):
  pass
# 1.创建类
#                    类名。    继承谁       成员
Fun = type("Foo", (object,), {"v1": 123, "func": lambda self: 666, "do": do})

# 2.根据类创建对象
obj = Fun()

# 3.调用对象中v1变量(类变量)
print(obj.v1)

# 4.执行对象的func方法
result = obj.func()
print(result)
复制代码

  

元类

复制代码
# 肯定由type创建
class Foo(object):
    pass
  
  
# 指定创建类的方法
# 首先先创建一个类,这个类继承type
# metaclass指定类

class Myclass(type):
  pass

class Fun(object,metaclass=Myclass):
  pass

# Fun类由Myclass创建
复制代码

  

例子

复制代码
class Myclass(type):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

    def __new__(cls, *args, **kwargs):
        new_class = super().__new__(cls, *args, **kwargs)
        return new_class

    def __call__(self, *args, **kwargs):
        # 1. 调用自己那个类的 __new__ 方法去创建对象
        empty_object = self.__new__(self)
        # 2. 调用自己那个类的 __init__ 方法初始化
        self.__init__(empty_object, *args, **kwargs)
        return empty_object


class Fun(object, metaclass=Myclass):

    def __init__(self, name):
        self.name = name
        # 执行的过程也是先走new在走init

        v1 = Fun("xiaoqiang")
        print(v1.name)

"""
类加()是执行 __new__ 和 __init__
对象加    ()[现在这段代码是Fun(),代码至上而下,走到class Fun处,创建Fun类,在往下遇见Fun()走Myclass的__call__的方法(也就是说Fun类是Mycls)]
是走的__call__ 的方法 在走__call__的方法时 先走的是__new__,在走__init__
"""
复制代码

 

  

 

posted @   流年中渲染了微笑  阅读(23)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示