On 01/02/2014 11:18 AM, Dominik George wrote:
Hi,

Am I missing something or don't classes know how they're called
(unlike funcs, which have a __name__ attribute, very practicle)? Is
there a way to get it otherwise?

The class has it, the instance doesn't. That said, you are looking for 
self.__class__.__name__ ...

class SuperType:
     # ...
     def __repr__ (sef):
         return "%s(stuff)" % (self.__class__.__name__, stuff)

... which you do use here.

Well, this was not real code, but an example of what I wished to be able to 
write!

But I need each class to know its name. Subtypes are actually
defined by users (of a lib), presently they are forced to write the
name explicitely, which is stupid since they already give it as var
name:

class SubType (SuperType):
     __name__ = "SubType"
     # ....

I do not get it. The __class__.__name__ thing works great for me:

   >>> class Foo():
   ...     def whoami(self):
   ...         return self.__class__.__name__
   ...
   >>> f = Foo()
   >>> f.whoami()
   'Foo'
   >>> class Bar(Foo):
   ...     pass
   ...
   >>> b = Bar()
   >>> b.whoami()
   'Bar'

Please be a bit more specific about your problem, because the problem
you described obviously does not exist ;).

I just missed it. Sorry!
In fact, I did:

class C: pass
...
dir(C)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']

No __name__, or am I blind? But:

C.__name__
'C'

Still, there is a __name__.
???


Compare with:

def f(): pass
...
dir(f)
['__annotations__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__globals__', '__gt__', '__hash__', '__init__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']

Here I can see __name__ (thus, I'm probably not that blind yet ;-).

Denis

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to