如何在我能';不要使用自我Python

如何在我能';不要使用自我Python,python,class,inheritance,python-3.x,Python,Class,Inheritance,Python 3.x,我有一个奇怪的问题。我有以下代码: class A: def f(): return __class__() class B(A): pass a = A.f() b = B.f() print(a, b) 输出是这样的: <__main__.A object at 0x01AF2630> <__main__.A object at 0x01B09B70> 那么,我如何获得B而不是第二个A?是为方法上下文设置的,并且仅真正用于su

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

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

class B(A):
    pass
a = A.f()
b = B.f()
print(a, b)
输出是这样的:

<__main__.A object at 0x01AF2630> <__main__.A object at 0x01B09B70>

那么,我如何获得
B
而不是第二个
A

是为方法上下文设置的,并且仅真正用于
super()

对于您希望使用
self.\uuuu class\uuu
的方法:

return self.__class__()
或者更好地使用
类型(self)

如果希望能够在类上调用该方法,则使用将引用传递给类对象,而不是保持未绑定状态:

@classmethod
def f(cls):
    return cls()

classmethod
s总是绑定到它们被调用的类,因此对于
A.f()
,那就是
A
,对于
B.f()
,你得到了
B

,我没有使用
self.\uuu class\uuuu()
,因为我不能使用
self
。我一直认为
@classmethod
使用对象而不是类。
我怎么能得到B而不是第二个A
-这是什么意思?打印文本中的
B
?实例。我的意思是,
b
成为
b
的实例。
@classmethod
def f(cls):
    return cls()