- E04 - Leadership! Google, Guido van Rossum, PSF
Xavier Morel
xavier.morel at masklinn.net
Tue Jan 3 16:00:44 EST 2006
Ilias Lazaridis wrote:
> I estimate that there is a "unfreeze" operation, too - which would lead
> to flexibity.
>
There is none, you have to make a copy of the object via the "dup"
(duplicate) method to get an unfrozen copy (note: clone yields an exact
copy, which means that it's still frozen).
Unfreezing an object is forbidden in Ruby.
Alex Martelli wrote:
> At the other extreme, Ruby's very productive choice is to
> allow freeze and unfreeze of everything (I believe -- but you should
> double check with a Ruby expert)
I'm no ruby expert, but I'm pretty sure there is no way to unfreeze a
frozen ruby object, you *have* to create a molten copy with the "dup"
method.
Ilias Lazaridis wrote:
> Alex Martelli wrote:
>> Ilias Lazaridis <ilias at lazaridis.com> wrote:
> [...] - google stuff
>
>>> http://lazaridis.com/case/lang/python.html#simple_variable_access
>>>
>>> this leads to a new limitation:
>>>
>>> "#LIMITATION: large amount of repetitive code"
>> One normally does not define large numbers of identical accessors (there
> [...] - (extensive elaboration)
>
> possibly one can provide the code for something similar to the ruby
> attr_accessor:
>
> class Talker
> def sayHello
> puts "Hello world"
> end
>
> attr_accessor :name, :age
>
> end
>
> thus they can later be accessed this way
>
> john.age = 19
>
> print john.age
>
There is no point, these exist because a ruby attribute can *never* be
accessed from outside the object, a Ruby attribute is always private
while a Python attribute is always public. This means that you *have to*
declare properties to have the ability to access an attribute of a Ruby
object, which lead to attr_accessor, attr_reader and attr_writer as
shortcut-declarations of basic properties.
The Pythonic equivalent of Ruby's attr_accessor is merely to do nothing,
because what the attr_accessor does is:
attr_accessor :something
generates
def something
@something
end
def something= value
@something = value
end
but not doing it would prevent any access to the "something" attribute.
(attr_reader only declares the getter method, making the attribute
read-only, and attr_writer only defines the setter, making the attribute
write-only)
One thing that is very important is that in Ruby you *never* deal with
member attributes from outside the object, only methods (messages to the
object).
In Python, you deal either with methods (messages) or attributes
(datas), but these attributes can be either "real" attributes (real
unchecked data) or properties, e.g. virtual attributes (that may
generate side-effects, sanity check on the data, or _may not map to any
existing unique data in the object_) and unless you really try to, you
don't have any way to distinguish a "real" attribute from a property
("virtual" attribute), and you don't care.
>
> thus if I make a typo, I create a new attribute?
>
Why yes of course, what were you expecting?
More information about the Python-list
mailing list