Python 为什么我需要限定局部变量?

Python 为什么我需要限定局部变量?,python,Python,在本课程中: class MyClass () : foo = 1 @staticmethod def bar () : print MyClass.foo 为什么我需要用MyClass来限定foo?(否则我会得到名称错误:未定义全局名称“foo”) foo不是类MyClass的本地对象吗?您需要这样做,因为bar函数是一个静态方法。这意味着您可以调用它,而不必考虑包含类的实例。也就是说,您不必创建类的实例来访问该函数 您可以阅读更多有关它的信息-您需

在本课程中:

class MyClass () :
    foo = 1

    @staticmethod
    def bar () :
        print MyClass.foo
为什么我需要用
MyClass
来限定
foo
?(否则我会得到
名称错误:未定义全局名称“foo”


foo
不是类
MyClass
的本地对象吗?

您需要这样做,因为bar函数是一个静态方法。这意味着您可以调用它,而不必考虑包含类的实例。也就是说,您不必创建类的实例来访问该函数


您可以阅读更多有关它的信息-

您需要这样做,因为bar函数是一个静态方法。这意味着您可以调用它,而不必考虑包含类的实例。也就是说,您不必创建类的实例来访问该函数


您可以阅读更多有关它的信息-

您需要这样做,因为bar函数是一个静态方法。这意味着您可以调用它,而不必考虑包含类的实例。也就是说,您不必创建类的实例来访问该函数


您可以阅读更多有关它的信息-

您需要这样做,因为bar函数是一个静态方法。这意味着您可以调用它,而不必考虑包含类的实例。也就是说,您不必创建类的实例来访问该函数


您可以阅读更多有关它的信息-

这称为类属性 可由
MyClass.foo
直接访问,并归该类所有。 它不属于类的实例


对于
self
这是实例变量,类的每个实例都有一个新的变量副本

这称为类属性 可由
MyClass.foo
直接访问,并归该类所有。 它不属于类的实例


对于
self
这是实例变量,类的每个实例都有一个新的变量副本

这称为类属性 可由
MyClass.foo
直接访问,并归该类所有。 它不属于类的实例


对于
self
这是实例变量,类的每个实例都有一个新的变量副本

这称为类属性 可由
MyClass.foo
直接访问,并归该类所有。 它不属于类的实例


对于
self
这是实例变量,类的每个实例都有一个新的变量副本

这是因为Python的范围查找顺序是LEGB(局部变量、封闭函数、全局变量、内置变量).Python中的更多详细信息。Python有一个显式类变量,它是该方法的第一个参数,通常名为
self
。通常可以使用
self.foo
访问
foo
,但在这种情况下,该函数是一个静态方法,因此它不接收显式类变量,因此没有替代ac的方法访问
foo
。或者删除对
foo
的引用,或者从
bar()
中删除
@staticmethod
装饰器,并添加
self
作为
bar()
的第一个参数,这是因为Python的范围查找顺序是LEGB(局部、封闭函数、全局、内置).Python中的更多详细信息。Python有一个显式类变量,它是该方法的第一个参数,通常名为
self
。通常可以使用
self.foo
访问
foo
,但在这种情况下,该函数是一个静态方法,因此它不接收显式类变量,因此没有替代ac的方法访问
foo
。或者删除对
foo
的引用,或者从
bar()
中删除
@staticmethod
装饰器,并添加
self
作为
bar()
的第一个参数,这是因为Python的范围查找顺序是LEGB(局部、封闭函数、全局、内置).Python中的更多详细信息。Python有一个显式类变量,它是该方法的第一个参数,通常名为
self
。通常可以使用
self.foo
访问
foo
,但在这种情况下,该函数是一个静态方法,因此它不接收显式类变量,因此没有替代ac的方法访问
foo
。或者删除对
foo
的引用,或者从
bar()
中删除
@staticmethod
装饰器,并添加
self
作为
bar()
的第一个参数,这是因为Python的范围查找顺序是LEGB(局部、封闭函数、全局、内置).Python中的更多详细信息。Python有一个显式类变量,它是该方法的第一个参数,通常名为
self
。通常可以使用
self.foo
访问
foo
,但在这种情况下,该函数是一个静态方法,因此它不接收显式类变量,因此没有替代ac的方法访问
foo
。要么删除对
foo
的引用,要么从
bar()
中删除
@staticmethod
装饰器,并添加
self
作为Python中
bar()
的第一个参数,“局部变量”的概念实际上只存在于函数中。函数(方法)类内部没有对类(或实例)作用域的隐式访问;必须显式指定包含所需属性的对象,即类或实例(按照惯例传递给方法为
self
)“显式优于隐式”,这可能与此有关。

在Python中,“局部变量”的概念实际上只存在于函数中。类中的函数(方法)没有对类(或实例)的隐式访问权作用域;必须显式指定包含所需属性的对象,即类或实例(按约定)