Python“self”未在函数参数列表中定义

时间:2014-08-05 15:56:32

标签: python self

有没有办法做到以下几点?

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)

......但这只是令人讨厌。

2 个答案:

答案 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
    ...

您根本无法根据另一个参数的值为参数设置默认值,因为尚未定义默认值的参数尚未定义。