children = [cls.convert(child) for child in val] return cls(val.node, children) 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

children = [cls.convert(child) for child in val] return cls(val.node, children)

Поиск

return A.__name__

name = staticmethod(name)

 

print A.name() a = A()

 

print a.name()

 

Статическому методу не передается параметр с экземпляром класса.Он ему попросту не нужен.

 

ВPython 2.4для применения описателей(descriptors)был придуман новый синтаксис-декораторы:

 

class A(object):

 

@staticmethod def name():

 

return A.__name__

 

Смысл декоратора в том,что он"пропускает"определяемую функцию(или метод)через заданную в нем функцию.Теперь писать name три раза не потребовалось.Декораторов может быть несколько,и применяются они в обратном порядке.

 

Метод класса

 

Если статический метод имеет свои аналоги вC++иJava,то метод класса основан на том,что вPythonклассы являются объектами.В отличие от статического метода,в метод класса первым параметром передается объект-класс.Вместо self для подчеркивания принадлежности метода к методам класса принято использовать cls.

 

Пример использования метода класса можно найти в модуле tree пакета nltk(NaturalLanguage ToolKit, набор инструментов для естественного языка). Ниже приведен лишь фрагмент определения класса Tree(базового класса для других подклассов).Метод convert класса Tree определяет процедуру преобразования дерева одного типа в дерево

 

другого типа.Эта процедура абстрагируется от деталей реализации конкретных типов,описывая обобщенный алгоритм преобразования:

 

class Tree:

 

# ...

 

def convert(cls, val):

 

if isinstance(val, Tree):

 

children = [cls.convert(child) for child in val] return cls(val.node, children)

else:

return val

 



Поделиться:


Последнее изменение этой страницы: 2024-06-27; просмотров: 59; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.128 (0.009 с.)