【发布时间】:2015-08-24 05:44:28
【问题描述】:
我有一个带有变量的类,它应该是这个类的一个实例。我无法在声明行创建实例,因为 python 解释器此时不知道如何构造对象。有一个可能的解决方法:在类声明之后初始化。
class A(object):
static_variable = None
def some_method(self, a=static_variable):
print a
A.static_variable = A()
但我需要使用该类变量作为默认参数。可以这样解决问题:
def some_method(self, a=None):
a = a if a else A.static_variable
print a
但是,对我来说,它看起来非常非 Python。任何关于如何使用这种静态变量作为默认参数的建议都将不胜感激。
【问题讨论】:
-
使用
param=None然后测试if parem is None绝对是pythonic。 -
为什么实例需要是类的变量呢?为什么不简单地在模块级别定义它?
-
@DanielRoseman 是的,我可以在模块级别定义它,但它仍然不能解决默认参数的问题。
-
@MartijnPieters 恕我直言
def f(a=2): print a与def f(a=None): a = a if a 2; print a相比更具pythonic 风格 -
@midas:当默认值是可变的并因此在所有函数调用之间共享时不会。
标签: python oop static static-variables