【问题标题】:python factory method relative to the instance itself, (class method also using self as argument?)相对于实例本身的python工厂方法,(类方法也使用self作为参数?)
【发布时间】:2022-01-06 00:34:01
【问题描述】:

原来我有这段代码,

class Foo:
    def __init__(self, val:int):
        self.val = val

    def next(self) -> Foo:
        """
        Returns:
            Foo: Foo with value 1 bigger than the current
        """
        return Foo(self.val+1)

其中,next() 方法是根据当前实例生成另一个 Foo 实例。

到目前为止它工作得很好,但是我已经阅读了python中的静态方法和类方法,似乎我应该为next()使用类方法,因为它是一个工厂方法(请指出如果我的想法错了!)

实现上述的最优雅的方式是什么?

【问题讨论】:

  • 由于它使用的是self中包含的信息,它似乎适合实例方法。
  • 不清楚如何使用静态方法,因为您没有实例的状态(即self.val)。
  • @khelwood,我明白你的意思了,我认为所有的“工厂方法”都应该是一个类方法,但现在看来,由于它使用来自实例的信息,它应该保持为实例方法

标签: python oop factory class-method


【解决方案1】:

考虑:

class Foo:
    index = 0
    def __init__(self):
        self.val = Foo.index
        Foo.index += 1

现在,你只需要做:

zero = Foo()
one = Foo()

如果你想强制一个起始值:

Foo.index = 99
n99 = Foo()
n100 = Foo()

【讨论】:

    猜你喜欢
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    • 2011-06-04
    • 1970-01-01
    相关资源
    最近更新 更多