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呢?
该魔__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.
| 归档时间: |
|
| 查看次数: |
135 次 |
| 最近记录: |