假设我们在不同的类中声明了一个具有相同名称的静态方法。有可能吗?
如果是,那么将如何调用哪个函数?
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 :(得分:2)
在每个班级中,您有三个具有xyz()
功能的课程。但是这些类没有任何关系,因为它们不是相互继承的。所以答案很简单: xyz()
将调用调用该方法的类。
例如: abc.xyz()
将调用xyz()
类的abc
函数。同样,您可以将ab1
和abc2
的功能称为: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_abc2
,abc1.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示例中,当前方法也会覆盖最后一个方法。
每个方法都将被唯一地调用,因为在您的示例中每个类都是不相关的(除了所有类类型的类)。