On 07/02/2016 08:44 PM, Steven D'Aprano wrote:

Try getting this behaviour from within a class:


class Food(metaclass=Namespace):

     # (1) no special decorators required
     def spam(n):
         return ' '.join(['spam']*n)

     # (2) can call functions from inside the namespace
     breakfast = spam(5)

     # (3) no "cls" or "self" argument
     def lunch():
         # (4) can access variables using their undotted name
         return breakfast + ' and eggs'

     def supper():
         # (5) likewise functions (a special case of #4)
         return lunch() + ' and a fried slice of spam'

     def mutate(n):
         # global inside the namespace refers to the namespace,
         # not the surrounding module
         global breakfast
         breakfast = spam(5)

Can you do all of that with an ordinary class?

You can get #2 already, but not the rest (without your spiffy code ;) :

Python 3.5.1+ (3.5:f840608f79da, Apr 14 2016, 12:29:06)
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> class Huh:
...   def blah(text):
...     print('blah blah %s blah blah blah' % text)
...   blah('whatever')
...
blah blah whatever blah blah blah

--
~Ethan~
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to