- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我打电话时str()
在具有重载 __getattribute__
的对象上方法它似乎没有使用它而是调用 __str__
直接地。是否有其他一些我应该修改的功能或让它使用的方法 __getattribute__
?如果我重载 __str__
直接它的行为符合预期,但这并不适合我的需求。
class A(object):
def __getattribute__(self, attr):
if attr == "__str__":
return lambda: "Hello"
return object.__getattribute__(self, attr)
x = A()
print(x)
print(str(x))
print(x.__str__())
最佳答案
是的,这是 documented behavior :
This method may still be bypassed when looking up special methods as the result of implicit invocation via language syntax or built-in functions.
For custom classes, implicit invocations of special methods are only guaranteed to work correctly if defined on an object’s type, not in the object’s instance dictionary
...
In addition to bypassing any instance attributes in the interest of correctness, implicit special method lookup generally also bypasses the
__getattribute__()
method even of the object’s metaclass......
Bypassing the
__getattribute__()
machinery in this fashion provides significant scope for speed optimisations within the interpreter, at the cost of some flexibility in the handling of special methods (the special method must be set on the class object itself in order to be consistently invoked by the interpreter).
关于python - 为什么 str() 不使用 __getattribute__ 来获取 __str__ 以及如何产生效果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61331027/
给定: In [37]: class A: ....: f = 1 ....: In [38]: class B(A): ....: pass ....: In
class Shadow(object): pass class Test(object): a = 1 b = 2 _shadow = Shadow() de
我想在调用特定方法之前调用带有参数的函数的包装方法。所以我想我必须重写 __getattribute__ 方法。 以下是代码示例: def wrapper(func): return func
class test(): name = 'arthur' def __getattribute__(self, value): return super().__getattribu
根据 python 描述符指南 https://docs.python.org/howto/descriptor.html 新样式类中的方法对象是使用描述符实现的,以避免在属性查找中对它们进行特殊封装
这个对我来说似乎有点棘手。前段时间我已经设法用类似的东西覆盖实例的方法: def my_method(self, attr): pass instancemethod = type(self.
考虑以下几点: class A(object): def __init__(self): print 'Hello!' def foo(self): p
我想覆盖对类中一个变量的访问,但正常返回所有其他变量。如何使用 __getattribute__ 完成此操作? 我尝试了以下操作(这也应该说明我正在尝试做的事情)但我得到一个递归错误: class D
我尝试重写数据类中的__getattribute__特殊方法,以获得属性的格式化版本。 @dataclass class _BaseRouteRegistry: VERSION = '1'
我尝试重写数据类中的__getattribute__特殊方法,以获得属性的格式化版本。 @dataclass class _BaseRouteRegistry: VERSION = '1'
我有以下代码: #-*-coding:utf-8-*- class A(object): def __init__(self, x): self.x = x def _
为了更好地理解这个问题,这里有一个例子: class Parent: def __getattribute__(self, attr): print('ha!')
我有一个包含成员对象的类。我想像调用容器类的方法一样调用成员的方法。 以下示例说明了(但在不同的上下文中)我想要做的事情。 假设我们有两个类代表两种不同类型的产品:玩具和鞋子。每个类都有两个方法,比如
我阅读了一些关于 python 的对象属性查找的内容(此处:https://blog.ionelmc.ro/2015/02/09/understanding-python-metaclasses/#o
class B(object): """new style class""" def __getattribute__(self, name): print '__getatt
这是从 Python 2.7.12 文档(3.4.12. 新型类的特殊方法查找¶)中检索到的代码片段: In addition to bypassing any instance attributes
如果这个问题有重复,抱歉,我没有找到它,如果有人找到,我会删除这个问题。 我有这个简单的 python 类: class NothingSpecial: @classmethod
我有以下类(class): class StrLogger(str): def __init__(self, *args): self._log_ = [] s
似乎 __getattribute__ 只有两个参数 (self, name)。 然而,在实际代码中,我拦截的方法实际上是带参数的。 无论如何都可以访问这些参数吗? 谢谢, 查理 最佳答案 __get
Python in a Nutshell 描述: 从类中获取属性时的查找过程,例如cls.name(参见 Why are the lookup procedures for getting an at
我是一名优秀的程序员,十分优秀!