Python class 属性的正确语法参考
Proper syntactic reference for Python class attributes
了解 class 和 Python 中的实例属性之间的区别后,这两者中哪一个是引用 class 属性的正确方法?
import requests
class SomePage:
PAGE_URL = 'www.someurl.com'
def __init__(self) -> None:
# Option A
self.request_a = requests.get(self.PAGE_URL)
# Option B
self.request_b = requests.get(SomePage.PAGE_URL)
任何选项的结果都是一样的。有没有比较喜欢的?
这些是不一样的,所以你用什么取决于你的意图。如果我们考虑以下示例,这一点就会变得很清楚:
class Foo:
bar = 42
def method1(self):
return self.bar
def method2(self):
return Foo.bar
class Baz(Foo):
bar = 99
baz = Baz()
回复中:
>>> baz.method1()
99
>>> baz.method2()
42
因此,self.PAGE_URL
将检查实例命名空间,然后是 class 命名空间,然后是 classes 方法解析顺序中的所有命名空间.
另一方面Foo.bar
会检查Foo
的命名空间,然后是Foo方法解析顺序中的所有命名空间.
了解 class 和 Python 中的实例属性之间的区别后,这两者中哪一个是引用 class 属性的正确方法?
import requests
class SomePage:
PAGE_URL = 'www.someurl.com'
def __init__(self) -> None:
# Option A
self.request_a = requests.get(self.PAGE_URL)
# Option B
self.request_b = requests.get(SomePage.PAGE_URL)
任何选项的结果都是一样的。有没有比较喜欢的?
这些是不一样的,所以你用什么取决于你的意图。如果我们考虑以下示例,这一点就会变得很清楚:
class Foo:
bar = 42
def method1(self):
return self.bar
def method2(self):
return Foo.bar
class Baz(Foo):
bar = 99
baz = Baz()
回复中:
>>> baz.method1()
99
>>> baz.method2()
42
因此,self.PAGE_URL
将检查实例命名空间,然后是 class 命名空间,然后是 classes 方法解析顺序中的所有命名空间.
另一方面Foo.bar
会检查Foo
的命名空间,然后是Foo方法解析顺序中的所有命名空间.