class declaration shortcut
Luis M. González
luismgz at gmail.com
Fri Mar 2 18:48:03 EST 2007
On Mar 2, 8:29 pm, "MonkeeSage" <MonkeeS... at gmail.com> wrote:
> On Feb 28, 1:26 pm, "Luis M. González" <luis... at gmail.com> wrote:
>
> > I've come across a code snippet inwww.rubyclr.comwhere they show how
> > easy it is to declare a class compared to equivalent code in c#.
> > I wonder if there is any way to emulate this in Python.
>
> I posted like 10 minutes ago, but it looks like it didn't go through.
> The ruby code is not an easy way to declare a class, it is a ruby
> class for creating c-like struct objects.
>
> This is the basic idea behind the ruby Struct class (but this is quick
> and dirty, the real implementation is different and done in c, but you
> should get the basic idea):
>
> class Struct2
> def initialize(*args)
> @@attrs = []
> args.each { |arg|
> eval("class << self; attr_accessor :#{arg} end")
> @@attrs.push(arg)
> }
> end
> def new(*args)
> args.each_index { |i|
> eval("self.#{@@attrs[i]}=args[i]")
> return self
> }
> end
> end
>
> Person = Struct2.new(:name)
> bob = Person.new('bob')
> puts bob.name
>
> A python equiv. would be something like:
>
> class Struct():
> def __init__(self, *args):
> self.attrs = []
> for arg in args:
> setattr(self, arg, None)
> self.attrs.append(arg)
> def __call__(self, *args):
> for i in range(len(args)):
> setattr(self, self.attrs[i], args[i])
> return self
>
> Person = Struct('name')
> bob = Person('bob')
> print bob.name
>
> Regards,
> Jordan
Thanks for your detailed reply!
So after all, the www.rubyclr.com code is not a fair comparison.
Because the c# code shows a class definition, and the ruby code shows
a struct definition, which is not equivalent to a class.
Is that right?
More information about the Python-list
mailing list