En Mon, 29 Jan 2007 01:24:23 -0300, manstey <[EMAIL PROTECTED]> escribió:
> > Our class has its attributes set as classes, as in > > MyClass.Phone.Value='34562346' > MyClass.Phone.Private=True > > Inside the MyClass definition we have a function like this: > > def MyFunc(self,clsProperty): > if clsProperty.Private: > print 'Private property' > else: > print ClsProperty.Value This method does not use `self` at all, and that's rather suspicious for an instance method. And you set properties on the class itself? So you never create instances of that class? > In our code, we then call >>>> MyClass.MyFunc(MyClass.Phone) > > We want to be able in our code instead simply to call: >>>> MyClass.MyFunc(Phone) or MyClass.MyFunc('Phone') > > But we can't get it to work. If we rewrite the function as follows: > > def MyFunc(self,attr): > if self.attr.Private: > print 'Private' > else: > print self.attr.Value > > we get an error. Surely an AttributeError, because you dont have any attribute named "attr". Notice that on this version you are using `self`, but on the above version you didnt use it. There are easy ways in Python to access an attribute by name, but I think that this would just add more noise to your code. Please tell us about your design, or rethink it. Do actually exist instances of MyClass, or not? I can imagine "Phone" being an attribute of a certain instance of Person, by example, but not a class attribute. > Is there a better way to do this? Thanks Surely, but we need to know your goal, what do you really want to do, not how do you think you should do that. -- Gabriel Genellina -- http://mail.python.org/mailman/listinfo/python-list