我是否可以使用类作为属性从该类调用该类属性的子方法?



非常抱歉,我不知道该如何表达这个问题。

假设我有一个类,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 Bclass 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

最新更新