当我不能使用自己的Python时如何获得课程

kno*_*dge 3 python inheritance class python-3.x

我有一个奇怪的问题.我有以下代码:

class A:
    def f():
        return __class__()

class B(A):
    pass
a = A.f()
b = B.f()
print(a, b)
Run Code Online (Sandbox Code Playgroud)

输出是这样的:

<__main__.A object at 0x01AF2630> <__main__.A object at 0x01B09B70>
Run Code Online (Sandbox Code Playgroud)

那么我怎样才能获得B而不是第二A呢?

Mar*_*ers 7

__class__设置的方法方面,只有真正意味着使用super().

对于您想要使用的方法self.__class__:

return self.__class__()
Run Code Online (Sandbox Code Playgroud)

或者更好的是,使用type(self):

return type(self)()
Run Code Online (Sandbox Code Playgroud)

如果您希望能够在类上调用该方法,那么使用classmethod装饰器来提交对类对象的引用,而不是保持未绑定:

@classmethod
def f(cls):
    return cls()
Run Code Online (Sandbox Code Playgroud)

classmethods总是被他们所要求的班级所束缚,所以对于A.f()那个人来说A,因为B.f()你被交到了B.