Python“;“自我”;未在函数参数列表中定义
有没有办法做到以下几点Python“;“自我”;未在函数参数列表中定义,python,self,Python,Self,有没有办法做到以下几点 def getTables(self, db = self._dbName): //do stuff with db return func(db) 我得到一个“self”没有定义。我可以这样做 def getTables(self, db = None): if db is None: db = self._db //do stuff with db return func(db) 。。。但是这很烦人。
def getTables(self, db = self._dbName):
//do stuff with db
return func(db)
我得到一个“self”没有定义。我可以这样做
def getTables(self, db = None):
if db is None:
db = self._db
//do stuff with db
return func(db)
。。。但是这很烦人。函数签名是在定义函数时计算的,而不是在调用函数时计算的
定义函数时,还没有实例,甚至还没有类
确切地说:在创建类对象之前执行类主体的表达式。函数默认值的表达式在创建函数对象之前执行。此时,您无法创建要绑定到self
的实例
因此,使用哨兵(如None
)实际上是您唯一的选择。如果db
从不错误,您可以简单地使用:
def getTables(self, db=None):
db = db or self._db
也许这个在线版本会稍微不那么“烦人”:
您无法基于另一个参数的值为参数设置默认值,因为您要基于默认值的参数尚未定义。这些是独立的函数或方法吗?您要基于其他参数为参数设置默认值吗?正确的方法是:def getTables(self,db=None):简短回答:否。None
是这里正确的默认值。self
直到在方法内部才存在。@Dylan-+1——一个比我好得多的答案,因为理解这一点对于理解(例如)为什么def foo(bar={})
是邪恶和错误的(共享一个单一的、可变的{}
object,而不是在每次调用时都创建一个新的dict)。我只是一般不希望使用if语句。我希望在函数参数中使用它list@Dylan-啊,是的……但是python解释器想要什么呢?;)
def getTables( self, db = None):
db = self._db if db is None else db
...