How to prevent illegal definition of a variable in objects?
Daehyok Shin
sdhyok at email.unc.edu
Wed Jun 14 21:43:14 EDT 2000
Even though I corrected minor errors, it does not work.
Refer to the following comments.
>> class A:
> > def __init__(self):
> > self.x = 1 # this code calls __setattr__
# when I change it into self.__x = 1, it
raised AttributeError in __setattr__
> >
> > def __setattr__(self, name, value):
> > if name == "x":
> > self.x = value # this code calls __setattr__
recursively
> > else:
> > raise AttributeError
> >
> > def __getattr__(self, name):
> > if name == "x":
> > return self.x
> > else:
> > raise AttributeError
I found one solution, but expect better one.
-------------- Solution, but not good ------------------
class A:
def __init__(self):
self.__dict__["x"]=1
def __setattr__(self, name, value):
if not self.__dict__.has_key(name):
raise AttriubuteError
else:
self.__dict__[name] = value
def __getattr__(self, name):
if not self.__dict__.has_key(name):
raise AttriubuteError
else:
return self.__dict__[name]
"Sean Blakey" <sblakey at freei.net> wrote in message
news:20000614155102.E16232 at freei.com...
> On Wed, Jun 14, 2000 at 05:48:45PM -0400, Daehyok Shin wrote:
> > How can I prevent illegal definition of a variable to an object?
> > For instance,
> >
> > class A:
> > __init__(self):
> > self.x = 1
> >
> > __setattr__(self, name, value):
> > if name == "x":
> > self.x = value
> > else:
> > raise AttributeException
> >
> > __getattr__(self, name):
> > if name == "x":
> > return self.x
> > else:
> > raise AttributeException
> >
> > >>> a = A()
> > >>> a.x = 10
> > >>> a.y = 20 # I want to raise an AttributeException.
> >
> > Peter
> >
> >
> > --
> > http://www.python.org/mailman/listinfo/python-list
>
> The code you posted seems to do what you want, provided you
> a)add the 'def' keyword to your function definitions
> and
> b) define AttributeException (perhaps you meant AttributeError?)
>
> --
> Sean Blakey, sblakey at freei.com
> Software Developer, FreeInternet.com
> (253)796-6500x1025
> "Uncle Cosmo ... why do they call this a word processor?"
> "It's simple, Skyler ... you've seen what food processors do to food,
> right?"
> -- MacNelley, "Shoe"
>
More information about the Python-list
mailing list