- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果我想为一个实例设置一个属性:
我可以用 __setattr__(key, value)
或 self.__dict__[key]=value
我想知道如何__setattr__
有效,如果 __setattr__
只需在 __dict__
中设置 k,v ,两种方式有什么区别? setattr 存在的意义是什么?
最佳答案
而 __dict__
是一个内部字典,包含所有的内部变量,__setattr__
实际上是一个方法,当你试图设置一个属性时,它总是被调用,因此,你可以拦截这些 Action 并据此采取行动。
示例代码可以帮助您了解差异:
class Foo:
def __setattr__(self, key, value):
print(f'Setting {key} to {value}')
self.__dict__[key] = value
f = Foo()
f.__dict__['test'] = 1
f.__setattr__('test', 2)
f.test = 3
输出将是:
Setting test to 2
Setting test to 3
原因是通过访问
__dict__
,您正在直接访问内部对象字典和
__setattr__
方法被跳过。
关于python - __setattr__ 和 __dict__ 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67189446/
代码先行: class A(object): def foo(self): self.foo = 'foo' def bar(self): self.b
请看下面的片段: class Foo: class_var = "hi" foo = Foo() assert foo.class_var is Foo.class_var assert "c
>>> class A(object): pass ... >>> A.__dict__ >>> A.__dict__.__dict__ Traceback (most recent call la
如果我在 Python 解释器中运行以下代码: >>> object.__dict__ is object.__dict__ False 为什么结果是 False? 最佳答案 object.__dic
我感兴趣的是是否有一种方法可以可靠地内省(introspection) Python 实例以查看它的 __dict__ 尽管程序员可能会在途中抛出任何障碍,因为这将帮助我调试问题,例如意外的引用循环和
属性 __dict__ 应该包含用户定义的属性。但是如果我们打印一个空类的 __dict__,我也会得到: __module__ __dict__ __weakref__ __doc__ Python
我知道函数对象有一个 __dict__ .这很少用于向函数添加属性。有些人甚至用它来为函数添加注释。 我的疑问如下。如果有: def foo(): a = 2 return 在哪里 “一个
我对 dict 进行子类化,以便属性与键相同: class DictWithAttr(dict): def __init__(self, *args, **kwargs): s
我有一个字典,它的大小是 198526。 sys.getsizeof(dic)) # 198526 class Actor(object): def __init__(self):
给定一个任意类 X 作为输入,是否有可能找出 X 的实例是否有一个 __dict__? 我尝试了 hasattr(X, '__dict__'),但这不起作用,因为它检查类对象是否具有 __dict__
我需要定义一个名为“class”的类变量。我想直接在类命名空间中执行此操作,而不是在类方法中。显然,我不能直接说: class MyClass(object): a = 1 b = 2
这个问题在这里已经有了答案: Python class instance __dict__ doesn't contain all instance variables. Why? (3 个答案)
我试图直接使用 X.__dict__['x'] += 1 之类的东西修改类 __dict__ 中的值。那样修改是不可能的,因为类__dict__实际上是一个mappingproxy对象,不允许直接修改
我正在测试预定义的 字典 一个函数的属性,我得到了一个我没想到的结果。考虑以下代码: >>> def func(): x = 7 a = 0 print(fu
为什么这有效: class Bunch(dict): def __init__(self, *args, **kwargs): super(Bunch, self).__ini
代码在前, #Python 2.7 >>>class A(object): pass >>>a1 = A() >>>a2 = A() >>>A.__dict__ dict_proxy({
这个问题在这里已经有了答案: How do you programmatically set an attribute? (5 个答案) 关闭 6 年前。 我被告知我应该避免在我的代码中使用 sel
考虑这个例子,其中一个类 A 的所有实例的 __dict__ 将指向一个全局字典 shared。 shared = {'a': 1, 'b': 2} class A(object): def
有没有理由不这样做来比较两个对象: def __eq__(self, other): return self.__dict__ == other.__dict__ 与检查每个单独的属性相反:
我试图理解 python 中的束模式,我相信可以用以下方式表达: class Bunch: def __init__(self, **kwds): self.__dict__.
我是一名优秀的程序员,十分优秀!