【问题标题】:Scopes in a class in PythonPython 类中的作用域
【发布时间】:2011-05-02 20:00:31
【问题描述】:

请看这个:

class Car:
    def __init__(self, bid_code):
        self.__bid = bid_code

    def doit(self, cry):
        self.bid_it = cry

    def show_bid(self):
        print self.__bid

    def show_it(self):
        print self.bid_it

a = Car("ok")
a.show_bid()
a.doit("good")
a.show_it()

这里bid_it的范围是什么?我认为它是一个局部变量,因为它位于 def 块内。我怎么可能在函数之外调用它?我还没有声明 bid_it 是全局的。

谢谢

【问题讨论】:

  • variable bid_code 唯一使用的时间是在构造函数中,它是参数。在所有其他情况下,property 被访问。属性不作为变量“作用域”,尽管它们通过解析链运行。属性和变量都不是对象——它们只能包含/引用对象。

标签: python scope function


【解决方案1】:

通过使用self,您已将其绑定到实例。它现在是一个实例变量。实例变量是其实例的本地变量。如果变量是未绑定的(没有 self 前缀),它会具有函数作用域,并且一旦方法调用结束就会超出作用域,但是您已经将它绑定到其他东西(实例)。

【讨论】:

  • @steve 如果他的回答确实回答了您的问题,您应该通过单击复选标记接受它作为答案。它确实对社区有所帮助。
【解决方案2】:
def doit(self, cry):
    self.bid_it = cry

'self' 的作用类似于 c++ 中的 this 指针,在本例中是对 Car 对象的引用。如果 bid_it 没有在 self 中定义,它会动态创建并分配一个值。这意味着您可以在任何地方创建它,只要您有对对象的引用即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-04
    • 2010-10-05
    • 1970-01-01
    • 1970-01-01
    • 2011-06-14
    • 2015-03-02
    • 2013-02-09
    相关资源
    最近更新 更多