> Does anyone know if it's possible to call a property setter inside of a > class's init method? Below is a code sample of what I'm trying to do.
Just a quick guess: > class Question(object); replace the semi-colon with a colon (I assume it's just a typo, since you don't get an error for this). > > def __init__(self, value): > self.text(value) self.text = value # is the way to do this, if you're using it as a property. > > @property > def text(self): > return self._text > > @text.setter > def text(self, value): > if not isinstance(value, str): > raise TypeError > self._text = value > > > Here's an explanation of what I'm trying to accomplish: > > I have a class with an init method that is getting bloated with > error-checking guard clauses. I was hoping to "hide" some of these guard > clauses by using the @property decorator and its associated setter method. > I'd like to use the Question.text property to set the value (or raise an > error) upon instantiation of a Question object. I figured this would clean up > my init method and move the error-checking code closer to the relevant class > attribute. I've tried numerous variations on the above init method, but all > without success. > > > In the current version, when I try: > > >>> q = Question("Hello world?") > > I get the following error: > > AttributeError: 'Question' object has no attribute '_text' > > I was hoping text property would create self._text for me on instantiation, > but apparently no dice. I'm also getting errors when I do the below > variations: > > ### variation 1 #### > def __init__(self, value): > self._text = '' > self.text(value) > > ### variation 2 #### > def __init__(self, value): > self._text = None > self.text(value) > > Can anyone point out what I'm doing wrong? I suspect I'm misunderstanding > properties and/or the finer points of object instantiation. Any help would be > greatly appreciated! Again, see the correction above: use 'self.text = value'. Don't use self._text, nor call self.text() > > Thanks! > Serdar _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor