Наследование и доступ к родительскому классу в несвязанном методе в Python - PullRequest
0 голосов
/ 03 февраля 2012

У меня есть этот класс с несвязанным методом и статическим классом внутри:

class ClassA():
    class Foo():
        pass

    def getFoo():
        return ???.Foo

Теперь, если я унаследую ClassB от ClassA, как мне получить ClassB.getFoo () для возврата ClassB.Foo без явной реализации ClassB.getFoo ()? Возврат super().Foo не работает, запись ClassA.Foo тоже не работает.

Ответы [ 2 ]

4 голосов
/ 03 февраля 2012

Ваш getFoo должен быть методом класса:

class ClassA():
    class Foo():
        pass

    @classmethod
    def getFoo(cls):
        return cls.Foo

Методы класса передают свой класс в качестве первого аргумента, подобно тому, как методы экземпляра передаются экземпляру в качестве первого аргумента. Когда вы создаете подкласс ClassA, передается соответствующий класс.

0 голосов
/ 23 апреля 2016

Просто добавлю свои мысли по этому поводу: В дополнение к ответу @Ned Batchelder вы можете использовать статические методы для достижения аналогичной цели.

class ClassA():
    class Foo():
       def fooTest(self):
         print("Hello from {}!".format(self.__name__))

  @staticmethod
  def getFoo():
    return ClassA.Foo

class ClassB(ClassA):
    pass

И тест с:

>>> Foo = ClassB.getFoo()
>>> foo = Foo()
>>> foo.fooTest()
Hello from Foo!

Это для меня демонстрирует красоту языка питона - обычно есть несколько способов решения одной и той же проблемы ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...