大佬们,求问魔法方法问题。。
类似__setattr__(self, name, value)这类的魔法方法,好多都有一个形参是name,这个参数要传入的变量名。如果我们不设置或者使用这些魔法方法的话,这个参数都是自动传入的,不用考虑。那求问我要是自己使用类似super().__setattr__(变量名,变量值)的操作,来调用这类有name形参,需要传入变量名的魔法方法的话,请问怎么输入变量名和变量值??
name参数是输入字符串形式的吗?然后value参数输入的是不是变量形式?
另一个问题和这个有关的,请问大佬们,是不是所有变量与值都是用字典来存放,且字典的键都是字符串形式的形式存放的?? 还有,如果我们仅仅对__setattr__(self, name, value)这类的魔法方法进行修改的话,在这类魔法方法中使用self.__dict__ = value 这个操作的话,为啥不需要把name代表的变量名进行字符串化啊?__dict__中的变量名不都是字符串类型的吗? 这种方法基本都是隐式调用 kogawananari 发表于 2020-12-8 23:40
这种方法基本都是隐式调用
啥意思?就是尽量让程序自动调用,不要自己手动调用的意思吗?我昨天尝试手动调用它,错误提示是类型错误
Fileline 6, in __setattr__
super().__setattr__(self.counter,self.counter+1)
TypeError: attribute name must be string, not 'int'
好像是必须是传入字符串类型的参数,但是我的二楼问题又解释不了了。。。 https://zhuanlan.zhihu.com/p/101004827?from_voters_page=true 有没有大佬知道这个代码的原理??请问变量x是怎么转化为字符串x的??为啥在魔法方法里变量x可以自动转化为字符串x,在外面就不行,会报错??
>>> class A:
def __setattr__(self,name,value):
print(name)
self.__dict__ = value
print(self.__dict__)
>>> a = A()
>>> a.x = 1
x
{'x': 1}
>>> a.__dict__ = 2
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
a.__dict__ = 2
NameError: name 'y' is not defined
>>>
页:
[1]