非常抱歉,我不知道该如何表达这个问题。
假设我有一个类,A
。它的描述如下:
class A:
def __init__(self, argument):
self.value = argument
def submethod(self, argumentThatWillBeAClass):
print(dir(argumentThatWillBeAClass))
然后初始化,如下所示:
classAInstance = A('42.0')
现在,我有一个班,B
。让我们添加一个子方法,以B
为参数调用A
的子方法。
class B:
def __init__(self, argumentThatIsAClassAInstance):
self.classAInstance = argumentThatIsAClassAInstance
def submethod(self):
self.classAInstance.submethod(self)
让我们用classInstance
:
classBInstance = B(classAInstance)
我想要的结果是在调用B.submethod
时打印B
的所有属性。这可能吗?如果不可能,我该如何实现呢?
现在,我有一个类b,让我们添加一个调用a的子方法的子方法以B作为参数
但这不是你的代码所做的。在下面一行:
self.classAInstance.submethod(self)
你正在调用方法(我不知道你说的"子"是什么意思)方法,这些都只是普通的方法)与*B
的实例,而不是B
.
有两种不同的方法:
self.classAInstance.submethod(type(self))
或:
self.classAInstance.submethod(B)
的语义并不完全相同,因为第一个是动态检索实例,如果其他类继承了B
,它将在上调用dir
类。第二个总是输出dir(B)
,不管是否继承。
:
class A:
def method(self, klass: type) -> None:
print(dir(klass))
class B:
def __init__(self, a: A) -> None:
self.a = a
def method(self) -> None:
self.a.method(type(self))
b = B(A())
作为一种可能的解决方案,您可以使用继承。这允许class B
从class A
继承一切
class A:
def __init__(self, argument):
self.value = argument
def submethod(self, argumentThatWillBeAClass):
print(dir(argumentThatWillBeAClass))
class B(A):
def __init__(self, value):
super().__init__(value)
def submethod(self, argumentThatWillBeAClass): # You can override the method and do extra code too.
super().submethod(argumentThatWillBeAClass) # Calls A's submethod function