要获得类名的字符串表示,我们可以使用obj.__class__.__name__
是否可以重载这些方法,以便我可以返回字符串而不是实际的类名?是否可以重写从对象派生的`__name__`?
2
A
回答
5
让我们试试吧! (是的,这个工程):
>>> class Foo(object):
... pass
...
>>> obj = Foo()
>>> obj.__class__.__name__ = 'Bar'
>>> obj
<__main__.Bar object at 0x7fae8ba3af90>
>>> obj.__class__
<class '__main__.Bar'>
你也刚刚做Foo.__name__ = 'Bar'
,我以前obj.__class__.__name__
要与你的问题是一致的。
4
2
你可以这样做:
>>> class Foo(object):
... def __init__(self):
... self.__class__.__name__ = "Bar"
...
>>> print Foo().__class__.__name__
Bar
或者你可以让自己的双下划线属性。
>>> class Foo(object):
... __name__ = "Bar"
...
>>> print Foo().__name__
Bar
但你为什么要这么做?我没有看到任何可能的用途。顺便说一句,我知道这不是__class__.__name__
相同,但我不认为改变__class__.__name__
通常是一个好主意。
+0
第二个版本仅适用于实例--Foo .__ name__'将保持不变。有趣的是,Python3允许以这种方式正确设置'__qualname__'。 – MisterMiyagi 2018-01-24 12:49:04
相关问题
- 1. 是否可以使用“this”从派生对象的基类发出信号
- 2. 是否可以编写/生成3D打印对象的文件?
- 3. 重置派生类对象
- 4. 是否可以重写window.document.location.host?
- 5. 是否可以重写drupal_build_css_cache?
- 6. 是否可以重用backgroundworker对象?
- 7. 是否可以通过make_unique取消引用经过缩减的派生对象?
- 8. 重写时可以比较对象是否为空?
- 9. 派生类对象是否包含基类对象?
- 10. Java LSP“派生对象可以替代基础对象”
- 11. 可以从System.ArgumentException派生吗?
- 12. 如何检查对象是否从接口派生?
- 13. 是否可以从PropertyInfo获取“对象”?
- 14. 是否可以从基类构造函数创建派生类?
- 15. C#是否可以从派生类中调用基类属性
- 16. c#mongodb找到派生对象的派生对象
- 17. 是否可以重写DRF中的StringRelatedField?
- 18. 是否可以重写Swift中的deinit?
- 19. 是否有可能派生一个DataGridView列,以便它可以存储任何类型的对象?
- 20. 重载子图,以便派生图对象可以创建子图(networkx)
- 21. OOP基础知识:从派生类中创建base-ctor中的重写对象
- 22. 任何方式来从C#中的不可变对象派生可变对象?
- 23. 为什么'virtual'对于派生类中的重写方法是可选的?
- 24. 是否可以自动生成SSIS派生列转换?
- 25. 是否有一个相当于Python对象的__name__
- 26. 我可以在python中更改__name__对象的属性吗?
- 27. 我可以告诉std :: type_info对象是否等于另一个或从另一个派生的类?
- 28. 是否可以“复制”模板类从非模板化基类派生的对象?
- 29. 是否可以编写自己的发布ActionEvents的对象?
- 30. 使用形状派生对象而不是可视派生对象造成的性能下降多少
'__class__'和'__name__'是类属性(我相信),而不是函数;这些当然是可变的,但是,你真的不应该因为明显的原因修改这些值。你究竟想要完成什么?你是否试图从类实例中返回一些任意的字符串?你可以定义你自己的功能。 – 2012-08-01 23:57:54