假设有人决定(是的,这很可怕)以下列方式创建句柄输入:用户在导入类后在python控制台上输入命令,该命令实际上是一个类名,类名为{{ 1}}函数实际上是一个带副作用的函数(例如,命令是“north”,函数会更改一些全局变量,然后返回描述当前位置的文本)。显然这是一个愚蠢的事情,但你会怎么做(如果可能的话)?
请注意,基本问题是如何在不创建类实例的情况下为类定义__str__
方法,否则它会很简单(但仍然同样疯狂:
__str__
答案 0 :(得分: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
答案 1 :(得分:1)
在控制台中,您将获得__repr__
负责的对象的表示。 __str__
用于打印:
>>> class A:
def __str__(self):
return 'spam'
>>> A()
<__main__.A object at 0x0107E3D0>
>>> print(A())
spam
>>> class B:
def __repr__(self):
return 'ham'
>>> B()
ham
>>> print(B())
ham
>>> class C:
def __str__(self):
return 'spam'
def __repr__(self):
return 'ham'
>>> C()
ham
>>> print(C())
spam
答案 2 :(得分:0)
您可以使用类的实例而不是类本身。像
这样的东西class MagicConsole(object):
def __init__(self, f):
self.__f = f
def __repr__(self):
return self.__f()
north = MagicConsole(some_function_for_north)
south = MagicConsole(some_function_for_south)
# etc