Переопределение статического метода в Python

Также вы можете попробовать просто перезагрузить ваше устройство - помогает мне.

46
задан Community 23 May 2017 в 11:47
поделиться

2 ответа

В используемой вами форме вы явно указываете, какой статический method_two класса должен вызывать. Если method_three был методом класса, и вы вызвали cls.method_two , вы бы получили желаемые результаты:

class Test:
    def method_one(self):
        print "Called method_one"
    @staticmethod
    def method_two():
        print "Called method_two"
    @classmethod
    def method_three(cls):
        cls.method_two()

class T2(Test):
    @staticmethod
    def method_two():
        print "T2"

a_test = Test()
a_test.method_one()  # -> Called method_one
a_test.method_two()  # -> Called method_two
a_test.method_three()  # -> Called method_two

b_test = T2()
b_test.method_three()  # -> T2
Test.method_two()  # -> Called method_two
T2.method_three()  # -> T2
64
ответ дан 26 November 2019 в 20:34
поделиться

Вы видите ожидаемое поведение. Статические методы ... статичны. Когда вы вызываете method_three () , определенный в Test , он обязательно вызовет method_two () , определенный в Test .

Что касается того, как чтобы "обойти" это правильное поведение ...

Самый лучший способ - сделать методы виртуальными, когда вам нужно виртуальное поведение. Если ты'

3
ответ дан 26 November 2019 в 20:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: