2016-10-06 135 views
0

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

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

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

那么,输出是什么以及我们如何调用不同类的不同功能?

+0

您的缩进在您的第一个示例中关闭。 –

+1

它实际上是覆盖,这与重载不同。但是,在这个例子中发生了什么? –

+0

除了识别问题之外,这个问题没有意义,因为在这个例子中甚至没有子类。 – lucasnadalutti

回答

2

您有三个类,每个类都有xyz()函数。但是这些类没有关系,因为它们并不是相互继承的。所以答案很简单:xyz()将被称为调用该方法的类。

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

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()打印class_abc1等。

此外,请注意,您使用的是Python 2.x,但实际上并没有从object继承。这不会创造出大多数人在今天意识到的意义上的课堂,请参阅What is the difference between old style and new style classes in Python?以更好地了解这些内容。

0

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

如果可能的话再怎么和函数将被调用。?

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

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