使用面向对象的方式写代码的一个问题

本文探讨了面向对象编程中动物类的设计方法,分析了单一对象处理多种类型的问题,并提出通过实例化不同动物来减少代码冗余及提高扩展性的建议。

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

假设我们创建了一个对象animal

var Animal = function(type){
return {
see:function(){
switch (type){
case 'dog' :
var i =2;
alert("dog to see"+i);
break;
case 'cat' :
var i =2;
alert("cat to see"+i);
break;
}
}
}
}


var mydog = new Animal("dog");



当需要增加新的动物类型的时候,又需要重新修改Animal对象,在see方法中增加新的类型.
使用这种方式编写代码是用的面向对象的方式吗?随着动物类型的增多,这个对象的see方法中的代码会越来越长.看到这么长的代码的时候,是不是很悲剧...


那么,应该怎么写,才是创建一个Animal的类,每个实例继承这个类的方法,然后这个方法的具体实现是在实例中去完成的

但是如果这样的话,那么是不是直接建立具体的实例,然后在每个实例中都使用相同的方法名see,在js中,Animal这个父类是不是多余的?


我想这个问题的重点应该是:我们想要的代码是一个思路清晰完整的代码段,还是一个代码重复性少但是掺杂着各种类型判断的代码段.

事实上,我们应该是创建不同的动物实例,它们有相同的方法,而不是在动物这个父类中无限的增加动物的类型的处理语句

我想,一段代码更多的应该是一步一步的表达程序的逻辑,而不是简单的达到统一.以减少代码的修改量
### ONNXMXNet 的互操作性 ONNX(开放神经网络交换)是一种用于表示深度学习模型的标准格式,旨在促进不同框架间的模型换和共享。对于 MXNet 用户而言,ONNX 提供了一种便捷的方式来进行模型的导入导出。 #### 将 MXNet 模型换为 ONNX 格式 为了使 MXNet 构建的模型能够在其他支持 ONNX 的平台上运行,可以通过 `mxnet.contrib.onnx` 工具包来完成这一过程[^3]: ```python import mxnet as mx from mxnet import gluon, nd from mxnet.gluon.model_zoo.vision import get_model from mxnet.contrib.onnx.onnx2mx.import_onnx import convert_from_string # 加载预训练好的 MXNet 模型 model_name = 'resnet18_v1' pretrained_net = get_model(model_name, pretrained=True) # 导出成 ONNX 文件 dummy_input = nd.random.uniform(shape=(1, 3, 224, 224)) export_path = './' + model_name + '.onnx' gluoncv.utils.export_block(export_path, pretrained_net, preprocess=False, layout='NCHW') ``` 这段代码展示了如何保存一个经过训练后的 ResNet-18 V1 网络到本地磁盘作为 `.onnx` 文件。需要注意的是,在实际应用中可能还需要调整输入张量形状以及其他参数设置以适应具体需求。 #### 从 ONNX 换至 MXNet 当拥有一个已经存在于 ONNX 中的模型并希望将其迁移到 MXNet 进行进一步开发或优化时,则可利用相同的工具集反向操作——即加载 ONNX 并创建对应的 MXNet Symbol 或 HybridBlock 实例: ```python from mxnet.contrib.onnx.onnx2mx.import_model import import_model sym_file = "./resnet18_v1-symbol.json" params_file = "./resnet18_v1-0000.params" symbol, arg_params, aux_params = import_model(sym_file, params_file) mod = mx.mod.Module(symbol=symbol, context=mx.cpu(), label_names=None) mod.bind(for_training=False, data_shapes=[('data', (1, 3, 224, 224))]) mod.set_params(arg_params, aux_params, allow_missing=True) ``` 上述脚本说明了怎样读取由 ONNX 表达的 ResNet-18 结构及其权重数据,并构建相应的 MXNet Module 对象以便后续处理。 通过这种方式,不仅能够简化跨平台移植的工作流程,而且有助于加速 AI 应用程序的研发周期以及提高生产效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值