z33*_*33m 7 python mysql printing class object
是否有可能在python中更改为类打印的内容.我知道如果我们提供__str__ __unicode__方法,我们可以改变打印类的实例的方式.但我想为一堂课做这件事
例如:
class A(object):
def __str__(self):
return 'hello'
a = A()
print a
Run Code Online (Sandbox Code Playgroud)
将打印hello.是否可以更改print A默认情况下打印的行为<class '__main__.A'>
更新:我想我也可以解释一下上下文.我正在尝试创建MySQL查询,我有表示表的类.这些表类中的每一个都有一个包含表名的类变量.所以我想要做的是能够将Class as参数传递给cursor.execute并在查询中替换表名.
是的,通过提供元类.这是一个坏主意,因为元类不能很好地构成,而且它是神奇而混乱的.
>>> class A(type):
... def __repr__(self):
... return '<this is not a class!>'
...
>>> class B(object):
... __metaclass__ = A
...
>>> print B
<this is not a class!>
Run Code Online (Sandbox Code Playgroud)
(你也可以改变__str__,这取决于这是什么的语义)
您更新了帖子以讨论从类生成SQL查询.而不是改变str(Class),为什么不使用Class.__name__(即你用它定义的名称),或者也许Class.table_name(即你为每个类定义的一些类属性)?能够传递类并使它们自动地工作为不是表单的表名<class 'foo.x'>可能会使代码的未来读者感到困惑,因为它不清楚这应该从上下文中起作用.读者必须记住涉及元类黑客攻击(一个相对罕见的东西,虽然不是在ORM中!)以及元类黑客做了什么.相比之下,只是通过Class.table_name而不是Class让事情变得非常明显.
| 归档时间: |
|
| 查看次数: |
347 次 |
| 最近记录: |