2

クラススコープを使用して子クラスを初期化する方法は? 親抽象クラスのスコープを子クラスに渡す方法は?

このコードを書くことはできますが、getChild を呼び出すたびに 1 つのクラスを作成しますが、次のことは避けたいと思います。

class Parent(object): # abstract class!
  @staticmethod
  def getParentName():
    raise NotImplementedError()

  @classmethod
  def getChild(cls): # solid class
    class Child(object):
      @staticmethod
      def getChildName():
        return 'Child of ' + cls.getParentName()
    return Child

class SomeParent(Parent):
  @staticmethod
  def getParentName():
    return 'Solid Parent'

print SomeParent.getChild().getChildName() # == 'Child of Solid Parent'

上記のコードを親スコープで子クラスを定義するように変換する方法 (親は抽象的であるため、オーバーライドされるため Parent2.getParentName() を使用できないと考えてください。

class Parent2(object): # abstract class!
  @staticmethod
  def getParentName()
    raise NotImplementedError()

  class Child2(object): # solid class
    # what code here to do the same like Child???
    pass

class SomeParent2(Parent): # final class
  @staticmethod
  def getParentName()
    return 'Solid Parent2'

SomeParent2.getChildClass().getChildName() # == 'Child of Solid Parent2'

建設的ではないものを除いて、どんな助けやヒントも大歓迎です。

4

1 に答える 1