如何访问方法内的qux
?我真的必须在foo()
的主体中重新定义它,还是有方法从self
导入它?在
class Baz(object):
qux = lambda x : x + '_quux'
def foo(self, bar=qux('fred')):
print bar
print qux('waldo')
# NameError: global name 'qux' is not defined
print Baz.qux('waldo')
# TypeError: unbound method <lambda>() must be called with Baz instance as first argument (got str instance instead)
print Baz.qux(self, 'waldo')
# TypeError: <lambda>() takes exactly 1 argument (2 given)
print self.qux('waldo')
# TypeError: <lambda>() takes exactly 1 argument (2 given)
qux
被视为实例方法,因为这是看起来像函数的类成员的默认处理方式(更具体地说,Baz.qux
有一个{self
参数。相应地,baz
被绑定到x
lambda参数。在Python中“self”这个名字没有什么神奇之处;它只是约定。方法绑定总是通过绑定到函数的第一个参数来实现的。在
如果你聪明的话,你可以亲眼看到:
一种解决方案是显式地使
qux
astaticmethod
,如svenmarnach的答案所示。(您也可以将其设为classmethod
,这是一个特定于Python的概念,功能更强大;staticmethod
与Java等语言中的static
关键字的行为非常相似。)请注意,与Java一样,您还可以在foo
内将staticmethod
作为self.qux
来访问。这是通过用staticmethod
安装的新机器来替换功能的正常__get__
机器。在另一种解决方案是在lambda参数中提供
^{pr2}$self
参数。如果你真的不想要“静态”行为(即需要用self
做点什么),这很有用,但看起来你确实需要这样做。为了完整起见,这看起来像:一个解决方案是使用
并将其作为
^{pr2}$我就把它从教室里搬出去。在
如果您想从类中访问方法,那么必须使用^{} 或^{} 。在
但是don't do that。在
相关问题 更多 >
编程相关推荐