Python:魔方

2024-03-28 12:11:55 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

ginst = ff()

>>ginst

Tags: 实例函数用户文本命令方式句柄副作用
3条回答

可以使用类的实例,而不是类本身。有点像

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

在控制台中,您将获得对象的表示,它由__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

你要找的是元类

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

相关问题 更多 >