tag:blogger.com,1999:blog-1387996720436450649.post6235602295320517129..comments2022-04-05T21:56:05.790-03:00Comments on Kodumaro: Propriedades e acessoresℭacilhας, ℒa ℬatalemahttp://www.blogger.com/profile/14265747724618147106noreply@blogger.comBlogger16125tag:blogger.com,1999:blog-1387996720436450649.post-53297967179581426632010-01-10T08:25:25.794-03:002010-01-10T08:25:25.794-03:00Caro Rodrigo,
Faz todo sentido.
Em scripts tenho...Caro Rodrigo,<br /><br />Faz todo sentido.<br /><br />Em <em>scripts</em> tenho o hábito de ajustar logo no cabeçalho o seguinte:<br /><br />__metatype__ = type<br /><br />O que faz com que <strong>toda classe declarada sem herança seja filha de object</strong>.<br /><br />No <em>prompt</em> do interpretador eu me esqueço de fazer isso.<br /><br />[]’s<br />Cacilhas, La Batalemaℭacilhας, ℒa ℬatalemahttps://www.blogger.com/profile/14265747724618147106noreply@blogger.comtag:blogger.com,1999:blog-1387996720436450649.post-77439136785864496772010-01-09T03:16:37.306-03:002010-01-09T03:16:37.306-03:00Acho que o problema é que pq para usar property a ...Acho que o problema é que pq para usar property a classe tem que herdar de object.Rodrigo Lirahttps://www.blogger.com/profile/13640459386669651705noreply@blogger.comtag:blogger.com,1999:blog-1387996720436450649.post-4945049845728217012009-08-27T21:05:53.219-03:002009-08-27T21:05:53.219-03:00Semente,
O fato é que funciona tirando ou não.
A...Semente,<br /><br />O fato é que funciona tirando ou não.<br /><br />A verdadeira questão é: por que não estava funcionando antes?<br /><br />[]'s<br />Cacilhas, La Batalemaℭacilhας, ℒa ℬatalemahttps://www.blogger.com/profile/14265747724618147106noreply@blogger.comtag:blogger.com,1999:blog-1387996720436450649.post-72384763348343118052009-08-27T18:06:47.514-03:002009-08-27T18:06:47.514-03:00La Batalema, o fato é que, retirando o _, você res...La Batalema, o fato é que, retirando o _, você resolve o bug. ;-)<br /><br />Até,<br />sementeAnonymousnoreply@blogger.comtag:blogger.com,1999:blog-1387996720436450649.post-83959531263252592732009-08-26T22:02:43.540-03:002009-08-26T22:02:43.540-03:00Olá gente!
Desculpem-me ter ficado tanto tempo se...Olá gente!<br /><br />Desculpem-me ter ficado tanto tempo sem responder este <em>thread</em>, mas perdi o fio da meada. =)<br /><br />Refiz os testes e <strong>tudo funcionou magicamente bem</strong>.<br /><br />Não sei o que estava dando errado, mas funciona. =/<br /><br />Semente, <strong>Python não possui atributos ou métodos protegidos</strong>, nem mesmo privados. O <em>underscore</em> antes de métodos e atributos apenas <strong>sugere</strong> que eles devam ser usados apenas de modo protegido, mas <strong>de forma alguma interfere no comportamento</strong> da linguagem.<br /><br />Mesmo o <em>underscore</em> duplo não é exatamente privado, apesar de alterar um pouco (muito pouco) o comportamento.<br /><br />Valeu por ter se identificado, Thiago!<br /><br />[]'s<br />Cacilhas, La Batalemaℭacilhας, ℒa ℬatalemahttps://www.blogger.com/profile/14265747724618147106noreply@blogger.comtag:blogger.com,1999:blog-1387996720436450649.post-28937569178337908192009-02-06T16:33:00.000-03:002009-02-06T16:33:00.000-03:00Pois então cara, se achar o bug do exemplo, posta ...Pois então cara, se achar o <I>bug</I> do exemplo, posta aí.<BR/><BR/>Anônimo ;^)Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-1387996720436450649.post-53263762376868641122009-02-04T10:26:00.000-03:002009-02-04T10:26:00.000-03:00Olá!A charada é o seguinte, seu método get e set e...Olá!<BR/><BR/>A charada é o seguinte, seu método get e set estão protegidos (_ no início do método), ou seja, só podem ser chamados pela classe ou subclasses e não servem como interface. ;-)Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-1387996720436450649.post-32575463011450866722009-02-02T08:53:00.000-03:002009-02-02T08:53:00.000-03:00Olá Guilherme!É isso aí mesmo. O que você entendeu...Olá Guilherme!<BR/><BR/>É isso aí mesmo. O que você entendeu sobre metaclasses é exatamente o que eu entendo. =)<BR/><BR/>O magnífico texto <A HREF="http://www.pythonbrasil.com.br/moin.cgi/UnificandoTiposClasses" REL="nofollow">Unificando Tipos e Classes</A> do GvR traz alguns exemplos interessantes, apesar de metaclasses não serem exatamento o foco do texto.<BR/><BR/>Escrevi um <A HREF="http://montegasppa.blogspot.com/2006/07/metaprogramao.html" REL="nofollow">artigo</A> há uns anos sobre metaclasses que talvez lhe interesse.<BR/><BR/>[]'s<BR/>Cacilhas, La Batalemaℭacilhας, ℒa ℬatalemahttps://www.blogger.com/profile/14265747724618147106noreply@blogger.comtag:blogger.com,1999:blog-1387996720436450649.post-79494606316767164192009-02-01T20:48:00.000-03:002009-02-01T20:48:00.000-03:00Esse post e aquele sobre singleton me deram bastan...Esse post e aquele sobre singleton me deram bastante diversão no final de semana. :-) Como não conhecia o conceito de metaclasses, caí dentro no Google para tentar compreender melhor como funciona.<BR/><BR/>Pelo que entendi, metaclasses servem como modelos para a criação de classes assim como classes servem como modelos para produzirem instâncias de classes. Considerando que tudo em Python é objeto, seria a classe de uma classe. Usar uma metaclasse no lugar da padrão 'type' possibilita certa modificação no comportamento da classe como registar todas as instâncias em um registro comum ou alterar o processo de criação e inicialização como você fez no singleton. Aliás, pelo que percebi metaclasses são usadas para modificar o comportamento de criação dos objetos na maioria das vezes.<BR/><BR/>Se possível, gostaria que você corrigisse quaisquer erros conceituais que eu tenha cometido no parágrafo acima e que me indicasse literatura que julga interessante sobre o assunto. Estou até pensando em criar um texto "metaclasses para newbies", já que nenhum texto que li esse final de semana pareceu muito amigável para quem nunca usou Python ou metaclasses antes. Os textos que li são os seguintes:<BR/><BR/>[1] http://www.gidnetwork.com/b-137.html<BR/>[2] http://en.wikipedia.org/wiki/Metaclass<BR/>[3] http://www.onlamp.com/pub/a/python/2003/04/17/metaclasses.html?page=1<BR/>[4] http://effbot.org/zone/metaclass-plugins.htm<BR/>[5] http://en.wikibooks.org/wiki/Python_Programming/MetaClasses<BR/><BR/>Dei uma olhada também em uma apresentação chamada 'Python Metaclasses: Who? Why? When?' que não lembro exatamente onde encontrei. O 'Unifying types and classes in Python 2.2' me pareceu um pouco árido, não consegui tirar muito dele.<BR/><BR/>Bom, é isso aí. Desculpe o comentário gigante.Guilherme Gallhttps://www.blogger.com/profile/13380244373472498797noreply@blogger.comtag:blogger.com,1999:blog-1387996720436450649.post-41359096577479719022009-02-01T13:10:00.000-03:002009-02-01T13:10:00.000-03:00Opa!Salve Kao!Aqui estou usando ainda a versão 2.5...Opa!<BR/><BR/>Salve Kao!<BR/><BR/>Aqui estou usando ainda a versão 2.5, portanto não tenho como testar seu exemplo.<BR/><BR/>Ainda assim, valeu pela dica!<BR/><BR/>[]'s<BR/>Cacilhas, La Batalemaℭacilhας, ℒa ℬatalemahttps://www.blogger.com/profile/14265747724618147106noreply@blogger.comtag:blogger.com,1999:blog-1387996720436450649.post-6012567997369643742009-01-31T23:32:00.000-03:002009-01-31T23:32:00.000-03:00Um adendo, já que eu não vi mencionarem no post ou...Um adendo, já que eu não vi mencionarem no post ou nos comentários. A partir do Python 2.6 dá pra fazer assim também:<BR/><BR/>class C(object):<BR/> @property<BR/> def x(self):<BR/> return self._x<BR/><BR/> @x.setter<BR/> def x(self, value):<BR/> self._x = value<BR/><BR/> @x.deleter<BR/> def x(self):<BR/> del self._x<BR/><BR/>Depois de criar um property, o valor resultante tem uma propriedade setter e outra deleter que pode ser usada como decorator tb.<BR/><BR/>O exemplo acima foi retirado da própria <A HREF="http://docs.python.org/whatsnew/2.6.html#other-language-changes" REL="nofollow">seção what's new dos docs do Python 2.6</A><BR/><BR/>Eu, pessoalmente, acho bem limpa essa forma de fazer.Kaohttps://www.blogger.com/profile/13077657840953960081noreply@blogger.comtag:blogger.com,1999:blog-1387996720436450649.post-63023743612284962992009-01-30T21:12:00.000-03:002009-01-30T21:12:00.000-03:00Isso é muito sinistro…É alguma moscada que eu dei....Isso é muito sinistro…<BR/><BR/>É alguma moscada que eu dei. Já estou tão acostumado a usar decoradores e, antes disso, metaclasses, que perdi o hábito de usar diretamente property.<BR/><BR/>Mas metaclasses e decoradores funcionam. =)<BR/><BR/>[]'s<BR/>Cacilhas, La Batalemaℭacilhας, ℒa ℬatalemahttps://www.blogger.com/profile/14265747724618147106noreply@blogger.comtag:blogger.com,1999:blog-1387996720436450649.post-28290083140208373982009-01-30T18:32:00.000-03:002009-01-30T18:32:00.000-03:00Que massaroka, cara!Aqui também deu pau!Eu coloque...Que massaroka, cara!<BR/>Aqui também deu pau!<BR/><BR/>Eu coloquei prints dentro dos métodos, para saber se eles estavam sendo acessados ao menos, mas constatei que não (a não ser que eu tenha feito algo errado). O acesso direto ao método também não funfou.<BR/><BR/>Olha aí:<BR/><BR/>>>> class Person:<BR/>........def __init__(self): name = ""; __age = 0<BR/>........def _get_age(self): print "get"; return self.__age<BR/>........def _set_age(self, age):<BR/>............if 0 <= age < 150: print "set"; self.__age = age<BR/>........age = property(_get_age, _set_age)<BR/>... <BR/>>>> p = Person()<BR/>>>> p.age = 500<BR/>>>> p.age<BR/>500<BR/>>>> p._set_age(600)<BR/>>>> p.age<BR/>500<BR/>>>> <BR/><BR/>=/Lopeshttps://www.blogger.com/profile/12789335425705023888noreply@blogger.comtag:blogger.com,1999:blog-1387996720436450649.post-62731286498035183462009-01-30T15:07:00.000-03:002009-01-30T15:07:00.000-03:00Isso é realmente estranho!Fiz um teste aqui…No pro...Isso é realmente estranho!<BR/><BR/>Fiz um teste aqui…<BR/><BR/>No <EM>prompt</EM> não funciona; mas escrevendo um <EM>script</EM> e executando-o, funciona. =/<BR/><BR/>Essa é nova.<BR/><BR/>Se alguém puder testar e entender o que acontece, agradeço.<BR/><BR/>Vou apenas mudar os nomes dos métodos para o código ficar mais de acordo com os códigos seguintes (mas testei sem mudar e mudando, não fez diferença).<BR/><BR/>[]'s<BR/>Cacilhas, La Batalemaℭacilhας, ℒa ℬatalemahttps://www.blogger.com/profile/14265747724618147106noreply@blogger.comtag:blogger.com,1999:blog-1387996720436450649.post-60566002018705310062009-01-30T15:02:00.000-03:002009-01-30T15:02:00.000-03:00Mmmmmmmmm...Realmente! Tem alguma moscada no prime...Mmmmmmmmm...<BR/><BR/>Realmente! Tem alguma moscada no primeiro código de propriedades.<BR/><BR/>Preciso rever e entender qual foi a burrada que cometi.<BR/><BR/>Assim que acertar, eu aviso.<BR/><BR/>Por favor, anónimo, identifique-se de alguma forma para eu poder dar crédito aqui a você ter encontrado o <EM>bug</EM>.<BR/><BR/>[]'s<BR/>Cacilhas, La Batalemaℭacilhας, ℒa ℬatalemahttps://www.blogger.com/profile/14265747724618147106noreply@blogger.comtag:blogger.com,1999:blog-1387996720436450649.post-54093718642745082002009-01-30T14:48:00.000-03:002009-01-30T14:48:00.000-03:00Muito legal o artigo.Tentei rodar o exemplo do pro...Muito legal o artigo.<BR/><BR/>Tentei rodar o exemplo do property mas acho que não deu certo:<BR/><BR/>>> p = Person()<BR/>>> <BR/>>> p.age = 151<BR/>>> p.age<BR/>151<BR/>>> <BR/>>> p.age = 15<BR/>>> p.age<BR/>15Anonymousnoreply@blogger.com