鱼C论坛

 找回密码
 立即注册
查看: 2917|回复: 7

[已解决]在使用__getattr__方法时遇到的问题 请求大神指教

[复制链接]
发表于 2022-8-22 21:59:14 | 显示全部楼层 |阅读模式

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

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

x
 class B:
        def __getattr__(self, attrname):
                self.attrname = 956

                
>>> b = B()
>>> b.name
>>> b.name
>>> b.__dict__
{'attrname': 956}


请问各位大佬 为什么结果为 b.attrname = 956;不应该是b.name = 956吗
求求了       想了好久不能理解
最佳答案
2022-8-23 10:14:38
本帖最后由 hveagle 于 2022-8-23 13:24 编辑

你的代码传入的参数attrname是没用的,而里面写的是
self.attrname = 956
就是把这个对象赋值了1个叫attrname的属性,赋值为956,传入的参数在这里是没用的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-23 09:54:14 | 显示全部楼层
>>> class D:
        def __getattr__(self, attrname):
                self.attrname = 956

                
>>> d = D()
>>> d.name
>>> d.ddddd
>>> d.msgvdfngdchnujnjdhsjfu
>>> d.attrname
956
>>> 
其实是很正常的,因为你写的是:
self.attrname = 956
所以name是不出结果的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-23 09:58:06 | 显示全部楼层
hveagle 发表于 2022-8-23 09:54
其实是很正常的,因为你写的是:

所以name是不出结果的

attrname 不是形式参数吗 我想要的效果是: 当对象没有某个属性时候 就为这个属性赋值为956
比如他没有name属性 我就想 让他的name = 956;他没有age属性 就让他的age属性为956
但是这个为什么只能设置attrname呢 我不明白的地方就在这里 能不能帮我解答一下 谢谢你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-23 10:14:38 | 显示全部楼层    本楼为最佳答案   
本帖最后由 hveagle 于 2022-8-23 13:24 编辑

你的代码传入的参数attrname是没用的,而里面写的是
self.attrname = 956
就是把这个对象赋值了1个叫attrname的属性,赋值为956,传入的参数在这里是没用的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-23 10:17:28 | 显示全部楼层
你找找其他人吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-23 10:20:07 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-23 10:22:33 | 显示全部楼层
hveagle 发表于 2022-8-23 10:17
你找找其他人吧

谢谢您
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-23 11:54:03 | 显示全部楼层
已经解决谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 11:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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