鱼C论坛

 找回密码
 立即注册
查看: 2428|回复: 5

大佬们,求问魔法方法问题。。

[复制链接]
发表于 2020-12-8 23:04:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
类似__setattr__(self, name, value)这类的魔法方法,好多都有一个形参是name,这个参数要传入的变量名。如果我们不设置或者使用这些魔法方法的话,这个参数都是自动传入的,不用考虑。
那求问我要是自己使用类似super().__setattr__(变量名,变量值)的操作,来调用这类有name形参,需要传入变量名的魔法方法的话,请问怎么输入变量名和变量值??
name参数是输入字符串形式的吗?然后value参数输入的是不是变量形式?

另一个问题和这个有关的,请问大佬们,是不是所有变量与值都是用字典来存放,且字典的键都是字符串形式的形式存放的??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-12-8 23:17:47 | 显示全部楼层
还有,如果我们仅仅对__setattr__(self, name, value)这类的魔法方法进行修改的话,在这类魔法方法中使用self.__dict__[name] = value 这个操作的话,为啥不需要把name代表的变量名进行字符串化啊?__dict__中的变量名不都是字符串类型的吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-8 23:40:35 | 显示全部楼层
这种方法基本都是隐式调用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-9 10:52:09 | 显示全部楼层
kogawananari 发表于 2020-12-8 23:40
这种方法基本都是隐式调用

啥意思?就是尽量让程序自动调用,不要自己手动调用的意思吗?我昨天尝试手动调用它,错误提示是类型错误
File  line 6, in __setattr__
    super().__setattr__(self.counter,self.counter+1)
TypeError: attribute name must be string, not 'int'

好像是必须是传入字符串类型的参数,但是我的二楼问题又解释不了了。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-9 11:47:16 | 显示全部楼层
https://zhuanlan.zhihu.com/p/101004827?from_voters_page=true
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-9 18:36:48 | 显示全部楼层
有没有大佬知道这个代码的原理??请问变量x是怎么转化为字符串x的??为啥在魔法方法里变量x可以自动转化为字符串x,在外面就不行,会报错??
>>> class A:
        def __setattr__(self,name,value):
                print(name)
                self.__dict__[name] = value
                print(self.__dict__)

                
>>> a = A()
>>> a.x = 1
x
{'x': 1}
>>> a.__dict__[y] = 2
Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    a.__dict__[y] = 2
NameError: name 'y' is not defined
>>> 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-17 03:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表