5

クラス内の関数からクラス属性にアクセスする方法はどうだと思いますか。PEP8 のリファレンスやそれに関するよくある質問は見つかりませんでした。例えば

class MyClass(object):
    BAR = 1
    def foo(self):
        # Way A:
        print(self.BAR)

        # Way B:
        print(MyClass.BAR)

属性が同じクラスによって所有されているため、「self」を介したアクセスは妥当と思われます。明らかな同じクラス参照のクローズ参照です。一方、クラス名自体を介したアクセスは、静的であるため明確であり、使用の起源が明確になり、クラスの名前とペアになっているため、より明確になる可能性があります。

4

2 に答える 2

6

クラス名を明示的に指定すると、サブクラスが属性をオーバーライドするのを防ぎます。

一方、selfを使用すると、この柔軟性が得られます。次のコードを検討してください。

class MyClass(object):
    BAR = 1
    def foo(self):
        # Way A:
        print(self.BAR)

        # Way B:
        print(MyClass.BAR)


class SubClass(MyClass):
    BAR = 2

class SubClass2(MyClass):
    pass

# output
>>> a = SubClass()
>>> a.foo()
2
1
>>> b = SubClass2()
>>> b.foo()
1
1
于 2018-05-28T13:22:58.020 に答える