想象一下,我有一个带可选参数的初始化器
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方法不是硬编码的东西,默认情况下将其设为零并稍后检查...
答案 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