gpt4 book ai didi

python - 在 python 中使用自定义初始化函数而不是 `__init__` 的好处

转载 作者:太空狗 更新时间:2023-10-30 00:12:58 24 4
gpt4 key购买 nike

我正在调查以下 code .

在很多情况下,__init__ 方法并没有真正被使用,而是有一个自定义的 initialize 函数,如下例所示:

def __init__(self):
pass

def initialize(self, opt):
# ...

这被称为:

data_loader = CustomDatasetDataLoader()
# other instance method is called
data_loader.initialize(opt)

我发现如果忘记调用此自定义 initialize 函数,其他实例方法中使用的变量仍可能未定义的问题。但是这种方法有什么好处?

最佳答案

有些 API(比如 setuptools 内部)有类似的东西,他们利用它来发挥自己的优势。 __init__ 调用可用于低级内部 API,而公共(public)构造函数被定义为用于可能构造对象的不同方式的类方法。例如,在 pkg_resources.EntryPoint 中,创建此类实例的方法是使用 parse 类方法。如果需要自定义初始化,可以采用类似的方式

class CustomDatasetDataLoader(object):

@classmethod
def create(cls):
"""standard creation"""
return cls()

@classmethod
def create_with_initialization(cls, opt):
"""create with special options."""
inst = cls()
# assign things from opt to cls, like
# inst.some_update_method(opt.something)
# inst.attr = opt.some_attr
return inst

这样类的用户将不需要两行代码来完成一行可以做的事情,他们可以简单地调用 CustomDatasetDataLoader.create_with_initialization(some_obj) 如果他们想要的话,或调用其他类方法构造此类的实例。

编辑:我明白了,你有一个链接的例子(希望带下划线的链接不会过时)——我觉得这种特定的用法和实现是一种糟糕的方式,当一个类方法(或者只是依赖于标准 __init__) 就足够了。

但是,如果该初始化函数是与其他一些系统的接口(interface),该系统接收特定类型的对象以使用它调用某些方法(例如,类似于访问者模式的东西),这可能是有意义的,但事实上它真的没有。

关于python - 在 python 中使用自定义初始化函数而不是 `__init__` 的好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46110469/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com