Article View: pl.comp.lang.python
Article #27477Re: Rev-super
From: Piotr Husiatynski
Date: Thu, 20 May 2010 17:51
Date: Thu, 20 May 2010 17:51
76 lines
2396 bytes
2396 bytes
Dnia 20.05.2010 Daniel Mróz <beorn@alpha.pl> napisał/a:
> Cześć
>
> Naszło mnie dzisiaj na "zabezpieczanie" klas i zrodziło się w
> głowie mej pytanie: jak wykryć czy klasa coś dziedziczy? Przykład,
> mam klasę bazową BaseFoo, która sama z siebie niewiele jest w stanie
> zrobić, zatem nie ma większego sensu tworzyć na jej podstawie obiektów.
> Chciałbym zrobić taki myk, żeby konstruktor wyczajał czy klasa jest
> tworzona z dziedziczenia, czy bezpośrednio. Czyli:
>
>
>
> class BaseFoo(object):
> def __init__(self):
> if not im_inherited():
> raise Exception('Booo!')
>
>
> class FooA(BaseFoo):
> def __init__(self):
> BaseFoo.__init__(self)
>
>
>
> Teraz, coś takiego:
>
>
> a = FooA()
>
>
> tworzy nam piękny obiekt, zaś:
>
>
> a = BaseFoo()
>
>
> wali wyjątkiem Exception('Booo!').
> Czy jest to możliwe, a jeśli tak to jak?
> Gdyby jeszcze dało się to zapakować w dekorator, typu:
>
>
> @baseclass
> class BaseFoo(object):
> [...]
>
>
> byłoby super.
Do czego cos takiego może być przydatne? Przecież Python to nie Java.
def baseclass(cls):
baseclass_name = cls.__name__
baseclass_init = cls.__init__
def fake_init(self, *args, **kwds):
if type(self).__name__ == baseclass_name:
raise Exception('Base class')
baseclass_init(self, *args, **kwds)
cls.__init__ = fake_init
return cls
@baseclass
class Base(object):
pass
class Foo(Base):
pass
foo = Foo()
base = Base()
--
Piotr Husiatyński
Technical Details
Message-ID:
<slrnhvatkr.58u.husio@oceanic.wsisiz.edu.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!wsisiz.edu.pl!not-for-mailReferences:
<slrnhvasos.cdd.beorn@pino.cyberdeck.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!wsisiz.edu.pl!not-for-mail From: Piotr Husiatynski <husio@gmail.com> Newsgroups: pl.comp.lang.python Subject: Re: Rev-super Date: Thu, 20 May 2010 17:51:23 +0000 (UTC) Organization: WSISiZ Lines: 76 Message-ID: <slrnhvatkr.58u.husio@oceanic.wsisiz.edu.pl> References: <slrnhvasos.cdd.beorn@pino.cyberdeck.pl> Reply-To: Piotr Husiatynski <phusiatynski@gmail.com> NNTP-Posting-Host: oceanic.wsisiz.edu.pl Mime-Version: 1.0 X-Trace: portraits.wsisiz.edu.pl 1274377883 18829 2001:1a68:a::33 (20 May 2010 17:51:23 GMT) X-Complaints-To: abuse@wsisiz.edu.pl NNTP-Posting-Date: Thu, 20 May 2010 17:51:23 +0000 (UTC) User-Agent: slrn/0.9.9p1 (Linux) Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit