【发布时间】:2016-05-02 04:23:30
【问题描述】:
假设我有一个带有可选参数的初始化器
def __init__(self, seed = ...):
现在,如果未指定参数,我想提供一个默认值。但是种子很难计算,所以我有一个类方法可以根据一些类变量建议种子
MyClass.seedFrom(...)
现在我怎么能从那个地方调用它?如果我使用self:
def __init__(self, seed = self.__class__.seedFrom(255)):
那时我绝对不知道什么是自我。如果我直接使用类名(我讨厌这样做):
def __init__(self, seed = MyClass.seedFrom(255)):
它抱怨
名称“MyClass”未定义
我也有兴趣学习 Python 的方法。而且我希望pythonic方式不是硬编码东西,默认情况下将其设为nil并稍后检查......
【问题讨论】:
-
是的,它默认为 nil 并稍后检查。
-
这绝对是 Pythonic 的方式。默认参数值只计算一次,在方法定义时类名不存在。您还可以考虑将 classmethod 作为替代构造函数。
-
"我希望 pythonic 的方式不是......默认为 nil 并稍后检查" - 你想要修复默认的
seed,还是选择一个新的每次一个?如果您每次都想要一个新的,那么您就会被这个选项卡住。 -
另一方面,如果你想修复它,首先定义
seedFrom并使用默认的seed=seedFrom(255),没有self或MyClass。 -
我重新提出了这个问题,因为我认为在定义
__init__时只需要调用一次seedFrom的情况值得考虑。
标签: python python-3.x