Python 怎么动态地给实例添加 magic method

2018-05-14 16:36:14 +08:00
 wcsjtu

python2.7 怎么动态地给实例添加 magic method, 比如说

from functools import partial
class A(object):
    def __init__(self, x):
        self.val = x
        
a = A(1)

magic = lambda self: "self.val=%s"%self.val

a.__str__ = partial(magic, a)

期望能输出这样地结果

print(str(a))	# self.val=1

但实际地输出是

print(str(a))	# <__main__.A object at 0x00000000037A0F60>

而这么调是可以地

print(a.__str__())	# self.val=1

试过元类, 但是私有方法没办法继承, 所以也不行。 大佬们有没有思路。。。

1788 次点击
所在节点    Python
4 条回复
wcsjtu
2018-05-14 16:59:01 +08:00
....打扰了, 用元类可以解决。。。。
luzhongqiu
2018-05-15 13:03:04 +08:00
确定不是 __unicode__? python3 才是__str__吧,我没试验,记得是这样。。放弃 py2 到 py3 吧。。。
rookiebulls
2018-05-15 20:18:35 +08:00
partial(magic, a)是个函数啊
gjquoiai
2018-05-19 00:01:06 +08:00
A.__str__ = magic

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/454755

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX