[Tutor] declare a variable inside a class
richard kappler
richkappler at gmail.com
Thu Feb 11 16:03:48 EST 2016
Thanks for the reply Martin, and in this instance I cannot post the actual
code (company rules). What I can do is say that with the xslt variable
defined within the formatter method, everything works, but when I pull it
out and put it in the upper level of the class, it gives me a traceback
that says the global variable xslt is not defined. Does that help?
regards, Richard
On Thu, Feb 11, 2016 at 3:43 PM, Martin A. Brown <martin at linux-ip.net>
wrote:
>
> Hi there again Richard,
>
> [snipped a bit of stuff]
>
> >The method that actually formats the messages opens the xslt file,
> >then uses it to format the message. Clever boy that I am, I figured
> >it would be better to open the xslt file once, rather than once per
> >message, so I moved the line
> >
> >xslt = ('path/to/xslt.file')
>
> Yes, this is a good idea.
>
> >out of the method it was in and up to the top level of the class, to wit:
> >
> >class MyClass():
> >
> > xslt = ('path/to/xslt.file')
> >
> > def a_bunch-of-methods():
>
> An impossible method name. That would be a syntax error.
>
> >and so on.
> >
> >Obviously this didn't work,
>
> Why is it obvious? What was obvious to me is the syntax error, but
> that does not appear to be what you are asking.
>
> What was the error message?
>
> >when the formatting method was called, it through an exception that
> >the variable xslt wasn't defined. This is my first not-a-toy try at
> >OOP, I could use a clue.
>
> So, before addressing your question, could I gently recommend that
> you post your actual code (clean up any variables or data that you
> don't want the public to see), whether it is running or not, along
> with any error messages (pasted, please).
>
> This is just a reminder, that this reduces the guesswork on the part
> of the members of the list.
>
> I think your problem is simply not knowing the name of the variable
> you called 'xslt'. Perhaps the below example helps?
>
> -Martin
>
> #! /usr/bin/python3
>
> class MyClass(object):
>
> xslt = '/usr/share/nmap/nmap.xsl'
>
> def find_xslt(self):
> print(xslt)
>
> def oh_there_it_is(self):
> print(self.xslt)
>
> def redefine_in_instance(self):
> self.xslt = '/usr/share/sgml/X11/xorg.xsl'
>
> if __name__ == '__main__':
>
> # -- instantiate the class
> c = MyClass()
>
> # -- this is what I think you were doing
> try:
> c.where_is_xslt()
> except AttributeError:
> pass
>
> # -- but, try locating the class attribute through self
> c.oh_there_it_is()
>
> # -- class attribute can be overridden in instances....
> c.redefine_in_instance()
> c.oh_there_it_is()
>
> # -- newly defined instances will get the default class attribute
> d = MyClass()
> d.oh_there_it_is()
>
> --
> Martin A. Brown
> http://linux-ip.net/
>
--
*Java is like Alzheimers; it starts slow and eventually, it takes away all
of your memory.*
More information about the Tutor
mailing list