python中未绑定方法的继承和访问父类

python中未绑定方法的继承和访问父类,python,inheritance,Python,Inheritance,我有一个未绑定方法的类,里面有一个静态类: class ClassA(): class Foo(): pass def getFoo(): return ???.Foo 现在,如果我从ClassA继承了一个ClassB,那么如何让ClassB.getFoo()返回ClassB.Foo而不显式实现ClassB.getFoo()?返回super().Foo不起作用,写入ClassA.Foo显然也不起作用。您的getFoo应该是一个classmeth

我有一个未绑定方法的类,里面有一个静态类:

class ClassA():
    class Foo():
        pass

    def getFoo():
        return ???.Foo

现在,如果我从ClassA继承了一个ClassB,那么如何让ClassB.getFoo()返回ClassB.Foo而不显式实现ClassB.getFoo()?返回
super().Foo
不起作用,写入
ClassA.Foo
显然也不起作用。

您的
getFoo
应该是一个classmethod:

class ClassA():
    class Foo():
        pass

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

类方法将其类作为第一个参数传递,类似于实例方法将实例作为第一个参数传递给实例的方式。当您将ClassA子类化时,将传递适当的类。

您的
getFoo
应该是一个classmethod:

class ClassA():
    class Foo():
        pass

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

类方法将其类作为第一个参数传递,类似于实例方法将实例作为第一个参数传递给实例的方式。当您将ClassA子类化时,会传递适当的类。

我想补充一下:除了@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!

这向我展示了python语言的魅力——通常有多种方法可以解决同一个问题

我想补充一下自己的想法:除了@Ned Batcheld的答案之外,您还可以使用静态方法来实现类似的目标

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!
这向我展示了python语言的魅力——通常有多种方法可以解决同一个问题