classes are objects... so how can we custom print them: we need a classmethod syntax

Peter Otten __peter__ at web.de
Fri Aug 20 14:40:33 EDT 2004


Neil Zanella wrote:

> Hello,
> 
> In Python, classes are objects. But there is no way to custom print a
> class object. This would require some syntax such as the one commented out
> below: With the current "foo = classmethod(foo)" mechanism custom printing
> for class objects is not possible.
> 
> #!/usr/bin/python
> 
> class Foo:
>   def __str__(self):
>     return "foo"
>   #def classmethod __str__(cls):
>   #  return "pythons bite"
> 
> foo = Foo()
> s = "hello %s!" % foo # custom text here
> print s
> 
> print Foo # no custom text here possible it seems, unless we call
>           # a staticmethod such as Foo.printMe()
> 
> Regards,
> 
> Neil

Classes are objects. You have to define the __str__() method in the object's
class - for a class that would be the metaclass. Now here:

>>> class FooType(type):
...     def __str__(self):
...             return "custom text for class %s" % self.__name__
...
>>> class Foo:
...     __metaclass__ = FooType
...     def __str__(self):
...             return "custom text for %s instance" %
self.__class__.__name__
...
>>> print Foo()
custom text for Foo instance
>>> print Foo
custom text for class Foo
>>>

Peter




More information about the Python-list mailing list