2016-10-06 4 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() будет вызывать xyz() функцию abc класса. Аналогичным образом вы можете позвонить по телефону ab1 и abc2 в качестве: 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_abc2, abc1.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, текущий метод переопределит последний метод.

Каждый метод будет называться однозначно, потому что каждый класс не имеет отношения к вашему примеру (за исключением всех классов класса типа).