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__ """
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现