有没有办法做到以下几点?
def getTables(self, db = self._dbName):
//do stuff with db
return func(db)
我得到"self" is not defined
。我能做到这一点......
def getTables(self, db = None):
if db is None:
db = self._db
//do stuff with db
return func(db)
......但这只是令人讨厌。
答案 0 :(得分:8)
在定义函数时评估函数签名,而不是在调用函数时。
当定义函数时,还没有实例,甚至还没有类。
准确地说:类主体的表达式是在创建类对象之前执行的。函数默认值的表达式在创建函数对象之前执行。此时,您无法创建将self
绑定到。
因此,使用哨兵(如None
)确实是你唯一的选择。如果db
从不虚假,您只需使用:
def getTables(self, db=None):
db = db or self._db
答案 1 :(得分:1)
也许这个onle-liner版本会稍微减少"烦人的":
def getTables( self, db = None):
db = self._db if db is None else db
...
您根本无法根据另一个参数的值为参数设置默认值,因为尚未定义默认值的参数尚未定义。