convert = classmethod(convert) 


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



ЗНАЕТЕ ЛИ ВЫ?

convert = classmethod(convert)

Поиск

convert = classmethod(convert)

 

Пример использования(взят из строки документации метода convert()):

 

>>> # Преобразовать tree в экземпляр класса Tree

>>> tree = Tree.convert(tree)

>>> # " " " " " ParentedTree

>>> tree = ParentedTree.convert(tree)

>>> # " " " " " MultiParentedTree


 


>>> tree = MultiParentedTree.convert(tree)

 

Метод класса позволяет более естественно описывать действия,которые связаны в основном с классами,а не с методами экземпляра класса.

 

Метаклассы

 

Еще одним отношением между классами является отношение класс-метакласс.Метакласс можно считать"высшим пилотажем"объектно-ориентированного программирования,но,к счастью,вPythonможно создавать собственные метаклассы.

 

ВPythonкласс тоже является объектом,поэтому ничего не мешает написать класс,назначением которого будет создание других классов динамически,во время выполнения программы.

 

Пример,в котором класс порождается динамически в функции-фабрике классов:

 

def cls_factory_f(func): class X(object):

pass

 

setattr(X, func.__name__, func) return X

 

Использование будет выглядеть так:

 

def my_method(self): print "self:", self

My_Class = cls_factory_f(my_method) my_object = My_Class() my_object.my_method()

 

В этом примере функция cls_factory_f() возвращает класс с единственным методом,в качестве которого используется функция,переданная ей как аргумент.От этого класса можно получить экземпляры,а затем у экземпляров-вызвать метод my_method.

 

Теперь можно задаться целью построить класс,экземплярами которого будут классы.Такой класс,от которого порождаются классы,и называется метаклассом.

 

ВPythonимеется класс type,который на деле является метаклассом.Вот как с помощью его конструктора можно создать класс:

 



Поделиться:


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

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