静态方法重载

时间:2016-10-06 23:55:59

标签: python python-2.7 function overloading

假设我们在不同的类中声明了一个具有相同名称的静态方法。有可能吗?

如果是,那么将如何调用哪个函数?

class abc:
    @staticmethod
    def xyz():
        print 'class_abc'
class abc1:
    @staticmethod
    def xyz():
        print 'class_abc1'
class abc2:
    @staticmethod
    def xyz():
        print 'class_abc2'

那么输出是什么以及我们如何调用不同类的不同函数?

3 个答案:

答案 0 :(得分:2)

在每个班级中,您有三个具有xyz()功能的课程。但是这些类没有任何关系,因为它们不是相互继承的。所以答案很简单: xyz()将调用调用该方法的类。

例如: abc.xyz()将调用xyz()类的abc函数。同样,您可以将ab1abc2的功能称为:abc1.xyz()abc2.xyz()

答案 1 :(得分:1)

你似乎误解了事情。类为自己引入了一个单独的命名空间,因此完全可以在不同的类中创建具有相同名称的函数。除了类似名称之外,这些函数不以任何其他方式相关。

运行<classname>.xyz()只需调用xyz()并打印相应的消息。

即使该类之间存在关系,即形式的子类关系:

class abc:
    @staticmethod
    def xyz():
        print 'class_abc'

class abc1(abc):
    @staticmethod
    def xyz():
        print 'class_abc1'

class abc2(abc1):
    @staticmethod
    def xyz():
        print 'class_abc2'

xyz的最新定义将覆盖以前的现有条目,效果将相同,即abc2.xyz()将打印class_abc2abc1.xyz()打印{ {1}}等等。

此外,请注意,您使用的是class_abc1,但实际上并未从Python 2.x继承。在今天大多数人都知道的意义上,这不会创建一个课程,看看 What is the difference between old style and new style classes in Python? 以更好地了解这需要什么。

答案 2 :(得分:0)

  

假设我们声明一个具有相同名称的静态方法是否可能?

  

如果可能,那么将如何以及将调用哪个函数。?

这是可能的,因为类有自己的范围。 Python以不同的方式处理示例中的每个静态方法。即使您的类相关,例如在@Jim Fasarakis-Hilliard示例中,当前方法也会覆盖最后一个方法。

每个方法都将被唯一地调用,因为在您的示例中每个类都是不相关的(除了所有类类型的类)。