Python __str__:Magic Console

Bri*_*ian 0 python

假设有人决定(是的,这很可怕)以下列方式创建句柄输入:用户在导入你的类后在python控制台上键入命令,该命令实际上是一个类名,类名的__str__函数实际上是一个函数有副作用(例如命令是"north",函数会更改一些全局变量,然后返回描述当前位置的文本).显然这是一个愚蠢的事情,但你会怎么做(如果可能的话)?

请注意,基本问题是如何在__str__不创建类实例的情况下为类定义方法,否则它会很简单(但仍然同样疯狂:

class ff:
    def __str__(self):
        #do fun side effects
        return "fun text string"

ginst = ff()

>>ginst
Run Code Online (Sandbox Code Playgroud)

Nad*_*mli 5

你要找的是元类

class Magic(type):
    def __str__(self):
        return 'Something crazy'
    def __repr__(self):
        return 'Another craziness'

class Foo(object):
    __metaclass__ = Magic

>>> print Foo
Something crazy
>>> Foo
Another craziness
Run Code Online (Sandbox Code Playgroud)

  • 在py3k中你需要传递`metaclass`作为关键字:`class Bar(metaclass = Magic):pass`让这个方法起作用. (2认同)