__New__#
'''
触发时机:实例化类生成对象的时候触发(触发时机在__init__之前)
功能:控制对象的创建过程
参数:至少一个cls接受当前的类,其他根据情况决定
返回值:通常返回对象或None
'''
基本使用#
class MyClass2():
a = 100
obj2 = MyClass2()
class MyClass1():
def __new__(cls):
print(cls)
"""类.成员方法(类)"""
return object.__new__(cls)
return obj2
return None
obj = MyClass1()
print(obj)
new 触发时机要快于 init#
"""
__new__ 创建对象
__init__ 初始化对象
"""
class MyClass():
def __new__(cls):
print(1)
return object.__new__(cls)
def __init__(self):
print(2)
obj = MyClass()
__new__的参数要和__init__参数一一对应#
"""
例如 obj = MyClass())
Python 首先调用 MyClass.__new__() 方法来创建一个新的实例对象,因为本身你创建时候会有对象 所以必须参数一致,然后再调用 MyClass.__init__() 方法来初始化这个实例对象。
"""
class Boat():
def __new__(cls,name):
return object.__new__(cls)
def __init__(self,name):
self.name = name
obj = Boat("万里阳光号")
print(obj.name)
class Boat():
def __new__(cls,*args,**kwargs):
return object.__new__(cls)
def __init__(self,name,type):
self.name = name
self.type = type
obj = Boat("万里阳光号","破木头做的")
print(obj.name , obj.type)
__new__和__init__之间的注意点#
"""
如果__new__ 没有返回对象或者返回的是其他类的对象,不会调用构造方法.
只有在返回自己本类对象的时候,才会调用构造方法.
"""
class Children():
def __new__(cls,*args,**kwargs):
return obj2
def __init__(self,name,skin):
print("构造方法被触发 ... ")
obj = Children("灭霸","紫薯")
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人