gt;>> s = MyClass()               # создается экземпляр класса 


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



ЗНАЕТЕ ЛИ ВЫ?

gt;>> s = MyClass()               # создается экземпляр класса

Поиск

Слабые ссылки

 

Для обеспечения ассоциаций объектов без свойственных ссылкам проблем с возможностью образования циклических ссылок,вPythonдля сложных структур данных и других видов использования,при которых ссылки не должны мешать удалению объекта,предлагается механизм слабых ссылок.Такая ссылка не учитывается при подсчете ссылок на объект,а значит,объект удаляется с исчезновением последней"сильной"ссылки.

 

Для работы со слабыми ссылками применяется модуль weakref.Основные принципы его работы станут понятны из следующего примера:

 

>>> import weakref

>>>

>>> class MyClass(object):

... def __str__(self):

... return "MyClass"

...

>>>

>>> s = MyClass()               # создается экземпляр класса

 

>>> print s MyClass

>>> s1 = weakref.proxy(s) # создается прокси-объект

>>> print s1

# прокси-объект работает как исходный

 

MyClass

# создается слабая ссылка на него

 

>>> ss = weakref.ref(s)

 

>>> print ss()

# вызовом ссылки получается исходный объект

 

MyClass

# удаляется единственная сильная ссылка на объект

 

>>> del s

 

>>> print ss()

# теперь исходного объекта не существует

 

None

 

 

>>> print s1

 

 

Traceback (most recent call last):

File "<stdin>", line 1, in ?

 

ReferenceError: weakly-referenced object no longer exists

 

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

 

Статический метод


 


Иногда необходимо использовать метод,принадлежащий классу,а не его экземпляру.В этом случае можно описать статический метод.До появления декораторов(доPython 2.4)определять статический метод приходилось следующим образом:

 

class A(object): def name():



Поделиться:


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

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