2010-07-22 2 views
4

Скажем, у меня есть этот код:Вызов метода из класса в другой класс в Python

class class1(object): 
    def __init__(self): 
     #don't worry about this 


    def parse(self, array): 
     # do something with array 

class class2(object): 
    def __init__(self): 
     #don't worry about this 


    def parse(self, array): 
     # do something else with array 

Я хочу, чтобы иметь возможность вызвать парсер class1 от class2 и наоборот. Я знаю, что с с ++ это можно сделать довольно легко, делая

class1::parse(array) 

Как бы сделать эквивалент в Python?

+4

Это то, что они называют «запах кода». Это выглядит плохой дизайн. В чем причина этого? –

ответ

4

Это звучит, как вы хотите static method:

class class1(object): 
    @staticmethod 
    def parse(array): 
     ... 

Обратите внимание, что в таких случаях Вы отпустите обычно, необходимый self параметр, поскольку parse не функция, которая вызывается на конкретном экземпляре class1.

С другой стороны, если вы хотите метод, который по-прежнему привязан к его владельцу класса, вы можете написать class method, где первый аргумент на самом деле объект класса:

class class1(object): 
    @classmethod 
    def parse(cls, array): 
     ... 
+0

Да, спасибо, похоже, что это сработает. – Swiss

+4

Обратите внимание, что если вы чувствуете потребность в таких статических методах, это сильное указание, что 'class1' и' class2' должны быть модулями вместо классов (или, по крайней мере, то, что вместо этого должны быть методы static 'parse'.) –

+1

' @staticmethod 'следует избегать (и' @ classmethod', если вам не нужен класс), чтобы сделать его модульной функцией. –

Смежные вопросы