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方法解析顺序中的所有命名空间.