python - 这两种情况有什么区别:传递类名与对象
问题描述
我是 Python 新手,不确定很多习语。我找到了函数获取类名作为参数的代码。有什么理由这样做吗?我已将代码简化为:
class A:
def __init__(self):
print ("A")
def foo_1(a):
inst = a()
return inst
def foo_2(a):
inst = a
return inst
if __name__ == "__main__":
i1 = foo_1(A)
i2 = foo_2(A())
像 foo_1 (现在的实现方式)和 foo_2 (我认为更直观的方式)实现它有什么区别
谢谢!
解决方案
这些做的事情略有不同。
foo_1
传递一个class
(本身就是一个对象),而不仅仅是它的名字。然后它实例化该类的一个实例,并返回该实例。
foo_2
传递一个实例(实际上在这个简化的例子中是任何对象)并返回它。
在此示例中,这意味着i1
并且i2
似乎是相同的。但它们实际上是不同的对象,例如,它们不会比较相等。
您可以使用类似的东西foo_1
作为某个类的实例的工厂,或者在创建实例之前修改类对象。foo_2
如果你想对实例做一些事情,你会使用。特别是这意味着如果您多次调用该函数,您每次都可以传递同一个实例,而foo_1
总是会生成一个新实例。
所以,这取决于你想做什么。
推荐阅读
- c# - 重用空类
- css - css中的动画菜单图标
- winapi - 识别 advapi32.dll 中使用的加密算法
- mysql - 玛丽亚数据库服务器
- python-3.x - 如何将 yscale 设置为日志记录?
- javascript - javascript中的计时器显示错误,我该如何解决?
- google-cloud-platform - 我该如何处理:错误:(gcloud.compute.ssh)?
- json - 使用 POST 方法将带有 JSONObject Volley 库的数据发送到服务器
- reactjs - React Native,映射 JSON
- javascript - 查询数据库时 AJAX jQuery 不起作用