Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python“;“自我”;未在函数参数列表中定义_Python_Self - Fatal编程技术网

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