🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.python
3 messages
3 total messages Started by Slominski T Mon, 06 Jul 2009 17:52
zmiana obiektu na inny
#26352
Author: Slominski T
Date: Mon, 06 Jul 2009 17:52
13 lines
1712 bytes
witam

czy w pythonie (w tej chwili 3.0) obiekt może sam siebie podmienić na
inny? Próbowałem z przypisaniem do self i self.__class__, owszem,
działało ale tylko w obrębie danej metody.
i czy istnieje jakiś sposób, żeby uzyskać listę wszystkich referencji
do danego obiektu? i ewentualnie je zmanipulować jakoś?

Moje doświadczenia z pythonem są krótkie i czysto hobbystyczne,
dlatego proszę o wyrozumiałość ;)

Pozdrawiam
Tomasz Slominski
Re: zmiana obiektu na inny
#26353
Author: Rob Wolfe
Date: Mon, 06 Jul 2009 20:13
55 lines
2478 bytes
Slominski T <tomasz.slominski@gmail.com> writes:

> witam
>
> czy w pythonie (w tej chwili 3.0) obiekt może sam siebie podmienić na
> inny? 

Zasadniczo obiekt 

>>> class MojaKlasa:
...     def __init__(self, x):
...             self.x = x
... 
>>> moj_obiekt = MojaKlasa(100)

to taki twór, który posiada:
a) unikalną i niezmienną tożsamość

>>> id(moj_obiekt)
3082205452

b) typ, który można zmieniać w pewnych okolicznościach [1]_

>>> type(moj_obiekt)
<class '__main__.MojaKlasa'>
>>> moj_obiekt.__class__
<class '__main__.MojaKlasa'>

c) jakąś zawartość, którą oczywiście też można zmieniać

>>> moj_obiekt.x
100

> Próbowałem z przypisaniem do self i self.__class__, owszem,
> działało ale tylko w obrębie danej metody.

Z powyższej defninicji wynika, że przypisanie do `self` nie ma
większego sensu, bo tożsamości obiektu zmienić nie można.
Przypisanie do `self.__class__` może mieć sens. Na tym się opiera
np, implementacja wzorca stanu w Pythonie [2]_.

> i czy istnieje jakiś sposób, żeby uzyskać listę wszystkich referencji
> do danego obiektu? i ewentualnie je zmanipulować jakoś?

http://docs.python.org/3.1/library/gc.html?highlight=get_referrers

Nie wiem co chciałbyś zrobić, ale od razu zapala mi się czerwona
lampka pod tytułem "wskaźniki na komórkę pamięci". W Pythonie
takie coś nie istnieje i nie można magicznie podmienić adresu
referencji.

RW

.. [1] http://article.gmane.org/gmane.comp.python.general/427452
.. [2] http://www.ubookcase.com/book/Oreilly/Python.Cookbook.2nd.edition/0596007973/pythoncook2-chp-6-sect-11.html
Re: zmiana obiektu na inny
#26354
Author: Slominski T
Date: Tue, 07 Jul 2009 11:51
20 lines
2058 bytes
On Jul 6, 10:13 pm, Rob Wolfe <r...@smsnet.pl> wrote:
> Slominski T <tomasz.slomin...@gmail.com> writes:

> > i czy istnieje jakiś sposób, żeby uzyskać listę wszystkich referencji
> > do danego obiektu? i ewentualnie je zmanipulować jakoś?
>
> http://docs.python.org/3.1/library/gc.html?highlight=get_referrers
>
> Nie wiem co chciałbyś zrobić, ale od razu zapala mi się czerwona
> lampka pod tytułem "wskaźniki na komórkę pamięci". W Pythonie
> takie coś nie istnieje i nie można magicznie podmienić adresu
> referencji.

Generalnie mam obiekty typu proxy, które w którymś momencie można
zastąpić
obiektem przez nie wywoływanym. Bez tego też działa, ale robi się
trochę za dużo
pośredników :(

Tomasz Slominski
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads