在Python 3.x中从另一个类调用类方法

时间:2018-08-20 11:13:18

标签: python python-3.x oop

因此,我遇到了这个answer,是从另一个类中调用类方法的。现在我的问题是,为什么仅通过以下代码就可以完成这么复杂的事情呢?

class a(object):
    def __init__(self):
        pass
    def foo(self):
        print('Testing')

class b(object):
    def __init__(self, c):
        c.foo()

A = a()
B = b(A)

输出为:

Testing

那么我的方法有什么问题?我想念什么吗?

1 个答案:

答案 0 :(得分:3)

基本上,由于Zen of Python表示:

  

显式优于隐式。

     

复杂胜于复杂。

从OOD(面向对象设计)的角度来看,您在两个类之间具有很强的依赖性,因为如果不调用类A的特定方法就无法初始化B,那现在就可以了,但是向前发展这种依赖性可能会导致长期运行中的问题。要更深入地了解这一点,请确保您熟悉Single responsibility principleSeparation of concerns的原理。

通常来说-如果在初始化期间总是调用另一个类的某个方法,则该方法可能应该从另一个类中移出。或者,您可以创建实用程序函数来处理该函数,而无需在类之间引入硬依赖性。

此外,SO问题中提供的解决方案也有所不同,因为它具有动态调用方法的名称,而不像您的示例中那样对名称进行硬编码。