【问题标题】:What is the best practice for initializing an instance variable in a class in python? [closed]在 python 的类中初始化实例变量的最佳实践是什么? [关闭]
【发布时间】:2020-11-17 14:21:07
【问题描述】:

下面两个变体来初始化一个类实例变量。在 python 中初始化类中的实例变量的最佳实践是什么以及为什么(可能没有建议的变体)?

假设:变体 a,因为它可能更明确?

class Example():
    def __init__(self, parameter):
        # EITHER
        # variant a to initialize var_1
        self.var_1 = self.initialize_var_1_variant_a(parameter)
        # OR
        # variant b to initialize var_1
        self.initialize_var_1_variant_b(parameter)
        # OR something else
        # ...

    def initialize_var_1_variant_a(self, parameter):
        # complex calculations, var_1 = f(parameter)
        result_of_complex_calculations = 123
        return result_of_complex_calculations

    def initialize_var_1_variant_b(self, parameter):
        # complex calculations, var_1 = f(parameter)
        result_of_complex_calculations = 123
        self.var_1 = result_of_complex_calculations


example_instance = Example("some_parameter")
print(example_instance.var_1)

【问题讨论】:

  • 你觉得哪个更清楚?
  • 我认为变体 a 因为它更明确?
  • 我通常更喜欢variant1。除了我不会叫它initialize_var_1 而是create_xxx 基于它创造的任何东西。在所有条件相同的情况下,应在__init__ 方法中设置实例变量。但正如@khelwood 指出的那样,如果它更清晰,请使用变体 2。

标签: python class variables initialization


【解决方案1】:

变体 A 是执行此操作的常用方法。能够通过查看__init__ 来查看所有类成员是非常好的,而不必深入研究其他函数 (initialize_var_1_variant_b) 来准确了解设置了哪些属性。

一般来说,一个类所拥有的所有成员属性都应该在__init__中初始化。

从另一个角度来看,initialize_var_1_variant_a 应该尽可能少做。计算var_1 的值并将其保存为类属性是可以轻松拆分的两个任务。

它还提供了将initialize_var_1_variant_a 移出类本身的可能性,因此它可以被程序的其他部分重用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    • 2015-07-05
    相关资源
    最近更新 更多