可选参数初始化中的访问类

时间:2016-01-25 18:31:32

标签: python python-3.x

想象一下,我有一个带可选参数的初始化器

def __init__(self, seed = ...):

现在,如果未指定参数,我想提供默认值。但种子很难计算,所以我有一个类方法,根据一些类变量建议种子

MyClass.seedFrom(...)

现在我怎么能从那个地方打电话呢?如果我使用self

def __init__(self, seed = self.__class__.seedFrom(255)):

我当然不知道那是什么样的自我。如果我直接使用类名(我讨厌做):

def __init__(self, seed = MyClass.seedFrom(255)):

它抱怨

  

名称'MyClass'未定义

我也有兴趣学习pythonic这样做的方法。我希望pythonic方法不是硬编码的东西,默认情况下将其设为零并稍后检查...

2 个答案:

答案 0 :(得分:2)

如果您只需要拨打seedFrom一次,则可以在定义__init__时执行此操作。

class MyClass:

    # Defining seedFrom as a function outside
    # the class is also an option. Defining it
    # as a class method is not, since you still
    # have the problem of not having a class to
    # pass as the first argument when it is time
    # to declare __init__
    @staticmethod
    def seedFrom():
        ...

    def __init__(self, seed=seedFrom()):
        ...

答案 1 :(得分:0)

如果你必须在 init 中执行此操作并希望种子方法在类上,那么你可以使它成为一个类方法,例如如下:

class SomeClass(object):

    defaultSeed = 255

    @classmethod
    def seedFrom(cls, seed):
        pass # some seed

    def __init__(self, seed=None):
        self.seedFrom(seed if seed is not None else self.defaultSeed)
        # etc