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

dyl*_*nmc 2 python self

有什么办法可以做到以下几点吗?

def getTables(self, db = self._dbName):
    //do stuff with db    
    return func(db)
Run Code Online (Sandbox Code Playgroud)

我得到了"self" is not defined.我能做到这一点......

def getTables(self, db = None):
    if db is None:
        db = self._db
    //do stuff with db
    return func(db)
Run Code Online (Sandbox Code Playgroud)

......但那只是烦人的.

Mar*_*ers 8

函数签名在定义函数时进行评估,而不是在调用函数时进行评估.

当定义函数时,还没有实例,甚至还没有.

确切地说:类主体的表达式在创建类对象之前执行.函数默认值的表达式在创建函数对象之前执行.此时,您无法创建要绑定的实例self.

因此,使用哨兵(像None)是你唯一的选择.如果db永远不假,你可以简单地使用:

def getTables(self, db=None):
    db = db or self._db
Run Code Online (Sandbox Code Playgroud)

  • +1 - 一个比我更好的答案,因为理解这对于理解(例如)为什么`def foo(bar = {})`是邪恶的和错误的(共享一个可变的`{}`对象很重要而不是在每次通话时创建一个新的dict). (2认同)