2011-01-28 4 views
0

в python есть способ объявить def, не помещая его в класс. Так что, если я просто нужно хранить много def «S в отделенной классе, я должен просто сделать это:Упорядочить определения

def first_method(): 
    pass 

def second_method(): 
    pass 

и не использовать @classmethod или @staticmethod:

class methods(): 

    @classmethod 
    def first_method(cls): 
     pass 

    @staticmethod 
    def second_method(): 
     pass 

если первый путь является правильным, как я должен отмечать частный и общедоступный метод?

ответ

3

Да. Просто сохраняйте функции, которые не являются методами экземпляра вне ваших классов.

Вы думаете, как и на Java. Python - это не Java. У Python нет истинного способа использования общедоступных и частных методов - вы можете изменить имена, чтобы указать, что вам нужна некоторая форма конфиденциальности (_ или __ в начале имени), но это не может быть осуществлено.

Я обнаружил, что за все время, которое я запрограммировал на Python, я никогда не хотел модификаторов доступа.

+0

Хороший ответ, только одна жалоба: Ведущий '__' (название mangling) в лучшем случае бесполезен и в худшем случае вреден (неясный NameErrors). – delnan

+0

@ delnan этого не знал. Честно говоря, я никогда не использовал его (почему бы мне?) –

+0

@ delnan: не могли бы вы подробнее рассказать об этом? Другими словами, что это может пойти не так с именем mangling? Благодарю. –

3

В Python нет таких вещей, как частные и общедоступные методы. По соглашению имена, начинающиеся с одного подчеркивания, считаются «частными», в некотором смысле, что пользователь не должен полагаться на свое существование. Кроме того, вы можете документ публичный интерфейс. Все остальное не должно иметь никакого отношения.

Множество мягко связанных функций было бы более питоническим решением, я бы сказал.