python:__new__()和 类名()创建的实例对象的细微差别

本文探讨了在Python中创建实例对象的两种方式:使用类名()和__new__()方法。通过代码示例展示了这两种方法的不同之处,即后者不会调用__init__()进行实例初始化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言
  • 一般来说,我们创建一个实例对象的时候是使用 类名() 的方式,但实际上 _ new _()也是可以的,当然它们有着细微的区别。
正文
  • code:
class Test:
    def __init__(self):
        self.test="test"


if __name__ == '__main__':
    t1 = Test()
    print(vars(t1))
    t2 = Test.__new__(Test)
    print(vars(t2))
    
    # {'test': 'test'}
	# {}
    
补充
  • 这是我在阅读 python cookbook 时的一个小发现,可能实用性不大,但也是值得记录一下(万一哪天有这种特殊的需求?)
  • 产生这种情况的原因是:t2直接被分配内存地址,没有经过 _ init _()的实例初始化。
### 如何使用已训练好的机器学习模型进行预测或推理 #### 加载保存的模型 为了能够利用已经训练完毕的机器学习模型执行预测任务,通常第一步是从磁盘加载该模型。这一步骤依赖于所使用的编程语言及其对应的库。 对于Python中的Scikit-Learn或其他支持pickle序列化的框架来说,可以通过`joblib`或者`pickle`模块来读取模型文件: ```python import joblib model = joblib.load('path_to_model.pkl') ``` 如果是在Keras/TensorFlow环境中,则应采用如下方式恢复模型状态[^3]: ```python from tensorflow.keras.models import load_model model = load_model('path_to_keras_model.h5') ``` 而对于PyTorch而言,会涉及到更多细节设置以确保设备兼容性模型结构的一致性: ```python import torch device = 'cuda' if torch.cuda.is_available() else 'cpu' model = TheModelClass(*args, **kwargs) # 替换为实际类名及相关参数 model.load_state_dict(torch.load('path_to_torch_model.pth', map_location=device)) model.eval() ``` #### 准备待测样本 一旦成功加载了预训练模型之后,下一步就是准备要被预测的数据实例。这些新数据应当遵循与训练期间相同的预处理流程,比如标准化、归一化等操作,这样才能保证输入特征空间一致,进而获得可靠的预测结果。 假设有一个新的观测值列表作为测试集的一部分,那么可能需要对其进行编码转换或是调整维度大小至符合预期格式的要求。 #### 执行预测过程 最后,在一切准备工作就绪的情况下就可以调用相应的方法来进行推断了。大多数情况下,这是通过简单的API接口实现的,例如`.predict()`方法适用于许多传统的ML算法;而在深度学习场景下则可能是`.forward()`或者是更高层次封装后的`.predict()`函数。 以下是几个不同平台下的具体例子: - Scikit-Learn风格的分类器/回归器: ```python predictions = model.predict(new_samples) ``` - Keras/TensorFlow模型: ```python predictions = model.predict(new_samples) ``` - PyTorch模型(注意这里假定已经在前面设置了evaluation模式): ```python with torch.no_grad(): # 关闭梯度计算提高效率并减少内存占用 predictions = model(torch.tensor(new_samples).to(device)).cpu().numpy() ``` 以上便是关于如何运用已有训练成果对未知案例做出判断的大致介绍。值得注意的是,不同的工具链之间存在细微差异,因此建议查阅官方文档获取最权威的信息指导实践工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值