🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.python
Article #26768

Re: python vs php - potrzebne argumenty

#26768
From: pakalk
Date: Mon, 02 Nov 2009 07:40
80 lines
4524 bytes
On Nov 2, 12:28 am, "Jaroslaw Zabiello" <use...@onet.eu> wrote:
> Dnia 01-11-2009 o 20:00:29 pakalk <pak...@gmail.com> napisał(a):
>
> > Poza tym, to nie ma nic takiego jak protected, przynajmniej w Py2.6 -
> > mylę się?
>
> > class ProtTest:
> >     _x = "Zmienna chroniona?"
>
> >     def _foo( self ):
> >         return "Funkcja chroniona?"
>
> > o = ProtTest()
>
> > print o._x
> > print o._foo()
>
> Tylko, że tak będzie pisał tylko ktoś kto nie ma pojęcia o Pythonie. Każdy  
> pythonista dobrze wie, że nie należy wywoływać tak nazwanych atrybutów  
> jakby to były atrybuty publiczne.

Otóż to właśnie jest brak wsparcia ze strony języka. Już zresztą
pisałem.

> Każdy (po nazwie) od razu widzi, że to  
> nie jest atrybut publiczny i po prostu tak się to traktuje. To wszystko  
> kwestia umowy. Ale aby to wiedzieć, trzeba wpierw chociaż poczytać sobie o  
> Pythonie i jego założeniach (btw, klas też się tak od dawna nie tworzy  
> tak, jak w twym przykładzie).

W tych założeniach nie ma wsparcia dla protected. I tyle. Po co
udawać, że jest?

>
> Te wszystkie kwalifikatory protected i private to kwestia konwencji.

Jakby tak było, toby błędami nie sypało.

> W  
> Pythonie wszystkie atrybuty są publiczne z definicji. Co nie znaczy, że  
> można przez pomyłkę coś nadpisać. Nie, trzeba to chcieć, zrobić celowo.

Wcale nie twierdzę, że nie.

> Np.
>
> >>> class ProtTest(object):
>
> ...   __x = "Zmienna prywatna"
> ...>>> o = ProtTest()
> >>> o.__x
>
> Traceback (most recent call last):
>    File "<stdin>", line 1, in <module>
> AttributeError: 'ProtTest' object has no attribute '__x'>>> o._ProtTest__x
>
> 'Zmienna prywatna'
>
> Z drugiej strony, jak ktoś chce, to w PHP5 też łatwo uzyska dostęp do jego  
> "atrybutów chronionych":
>
> <?php
> class ProtTest {
>    private $priv = "Zmienna prywatna?";
>    protected $prot = "Zmienna chroniona?";}
>
> $o = new ProtTest();
> $a = (array)$o;
> print $a["\0ProtTest\0priv"]; # => Zmienna prywatna?
> print $a["\0*\0prot"]; # => Zmienna chroniona?
> ?>
>
> Więc, nie rozumiem tu twojej krytyki Pythona. Poza tym upada ona zupełnie  
> przy Ruby, który posiada te kwalifikatory dostępu.

Nie do końca mnie rozumiesz. To nie jest kwestia krytyki pythona. Ja
po prostu stwierdzam fakt. Jeśli się ktoś rzuca na protected PHP, to
niech zauważy, że w Pythonie nie trzeba "atakować" tej formy
nkapsulacji, bo jej nie ma. Umówić można się na cokolwiek, ale to nie
jest wsparcie języka w danym problemie.
Technical Details
Message-ID: <808b5301-c6c7-4203-bc67-6cff86a05aae@m38g2000yqd.googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!newsfeed.icp.pl!nf1.ipartners.pl!ipartners.pl!news.nask.pl!news.nask.org.pl!news.uni-stuttgart.de!fu-berlin.de!postnews.google.com!m38g2000yqd.googlegroups.com!not-for-mail
References: <h83in7$rl3$1@inews.gazeta.pl> <b9dc7116-39db-474f-9282-8862b3f1cad2@d5g2000yqm.googlegroups.com> <a501db87-9ccf-4694-a8f8-330a67cdc839@15g2000yqy.googlegroups.com> <7aa62383-88c2-4138-89d6-594112504075@g27g2000yqn.googlegroups.com> <op.u2nhqrhyeaqjf2@macbook-pro-15-zbiru.local> <97ad13b9-95bf-4c61-8a1b-59c7c57e8499@s31g2000yqs.googlegroups.com> <op.u2oi93ceeaqjf2@macbook-pro-15-zbiru.local> <12b7fbaa-206c-4b39-8868-4e3b96eea704@37g2000yqm.googlegroups.com> <op.u2p83sqyeaqjf2@macbook-pro-15-zbiru.local> <c3247d6d-5199-4c45-9825-772387effd7b@f16g2000yqm.googlegroups.com> <819ec9ea-fb64-4947-b8e3-08492d688c1a@d5g2000yqm.googlegroups.com> <op.u2qotzozeaqjf2@macbook-pro-15-zbiru.local>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!newsfeed.icp.pl!nf1.ipartners.pl!ipartners.pl!news.nask.pl!news.nask.org.pl!news.uni-stuttgart.de!fu-berlin.de!postnews.google.com!m38g2000yqd.googlegroups.com!not-for-mail
From: pakalk <pakalk@gmail.com>
Newsgroups: pl.comp.lang.python
Subject: Re: python vs php - potrzebne argumenty
Date: Sun, 1 Nov 2009 23:40:00 -0800 (PST)
Organization: http://groups.google.com
Lines: 92
Message-ID: <808b5301-c6c7-4203-bc67-6cff86a05aae@m38g2000yqd.googlegroups.com>
References: <h83in7$rl3$1@inews.gazeta.pl> <b9dc7116-39db-474f-9282-8862b3f1cad2@d5g2000yqm.googlegroups.com>  <a501db87-9ccf-4694-a8f8-330a67cdc839@15g2000yqy.googlegroups.com>  <7aa62383-88c2-4138-89d6-594112504075@g27g2000yqn.googlegroups.com>  <op.u2nhqrhyeaqjf2@macbook-pro-15-zbiru.local> <97ad13b9-95bf-4c61-8a1b-59c7c57e8499@s31g2000yqs.googlegroups.com>  <op.u2oi93ceeaqjf2@macbook-pro-15-zbiru.local> <12b7fbaa-206c-4b39-8868-4e3b96eea704@37g2000yqm.googlegroups.com>  <op.u2p83sqyeaqjf2@macbook-pro-15-zbiru.local> <c3247d6d-5199-4c45-9825-772387effd7b@f16g2000yqm.googlegroups.com>  <819ec9ea-fb64-4947-b8e3-08492d688c1a@d5g2000yqm.googlegroups.com>  <op.u2qotzozeaqjf2@macbook-pro-15-zbiru.local>
NNTP-Posting-Host: 83.4.171.244
Mime-Version: 1.0
X-Trace: posting.google.com 1257147600 6220 127.0.0.1 (2 Nov 2009 07:40:00 GMT)
X-Complaints-To: groups-abuse@google.com
NNTP-Posting-Date: Mon, 2 Nov 2009 07:40:00 +0000 (UTC)
Complaints-To: groups-abuse@google.com
Injection-Info: m38g2000yqd.googlegroups.com; posting-host=83.4.171.244;  posting-account=rLTIYAoAAAAC0UY184o3dcMgnRpikGCw
User-Agent: G2/1.0
X-HTTP-UserAgent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US)  AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.27 Safari/532.0,gzip(gfe),gzip(gfe)
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit