鱼C论坛

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

[已解决]嵌套实例属性访问问题

[复制链接]
发表于 2022-11-11 12:35:27 | 显示全部楼层 |阅读模式

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

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

x
  1. class A:
  2.     def __init__(self,name):
  3.         print(name)
  4.         self.name=name
  5.     def __get__(a,b,c):
  6.         print(a,b,c)


  7. class B:
  8.     x=A("aa")
  9.    

  10.    
  11. b=B()
  12. b.x
  13. b.x.name
复制代码

  1. aa
  2. <__main__.A object at 0x0000015A3C6D6A70> <__main__.B object at 0x0000015A3C6D6AA0> <class '__main__.B'>
  3. <__main__.A object at 0x0000015A3C6D6A70> <__main__.B object at 0x0000015A3C6D6AA0> <class '__main__.B'>
  4. Traceback (most recent call last):
  5.   File "C:/Users/zy118/AppData/Local/Programs/Python/Python310/111.py", line 16, in <module>
  6.     b.x.name
  7. AttributeError: 'NoneType' object has no attribute 'name'
复制代码
最佳答案
2022-11-11 13:15:36
本帖最后由 jackz007 于 2022-11-11 13:40 编辑
zy8818 发表于 2022-11-11 12:52
这样是可以,我想知道为什么加了get后就不行了,没有解决方法吗?加了get后就只能当花瓶看了吗?


        __get__() 得有返回值
  1. class A:
  2.     def __init__(self , name):
  3.         self . name = name

  4.     def __get__(self , obj , objtype):
  5.         return self . name
  6.         
  7. class B:
  8.     x = A("aa")       # B . x 就是 A . name

  9. b = B()
  10. print(b . x)          # b . x 就是 A . name
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-11-11 12:47:47 | 显示全部楼层
  1. class A:
  2.     def __init__(self,name):
  3.         print(name)
  4.         self . name = name

  5. class B:
  6.     x = A("aa")

  7. b = B()
  8. print(b . x . name)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-11 12:52:10 | 显示全部楼层

这样是可以,我想知道为什么加了get后就不行了,没有解决方法吗?加了get后就只能当花瓶看了吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-11 13:15:36 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2022-11-11 13:40 编辑
zy8818 发表于 2022-11-11 12:52
这样是可以,我想知道为什么加了get后就不行了,没有解决方法吗?加了get后就只能当花瓶看了吗?


        __get__() 得有返回值
  1. class A:
  2.     def __init__(self , name):
  3.         self . name = name

  4.     def __get__(self , obj , objtype):
  5.         return self . name
  6.         
  7. class B:
  8.     x = A("aa")       # B . x 就是 A . name

  9. b = B()
  10. print(b . x)          # b . x 就是 A . name
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-11 13:47:24 | 显示全部楼层
  1. class A:
  2.     def __init__(self,name):
  3.         print(name)
  4.         self.name=name
  5.     def __get__(a,b,c):
  6.         print("__get__: ",a,b,c)
  7.         return a


  8. class B:
  9.     x=A("aa")
  10.    

  11.    
  12. b=B()
  13. b.x
  14. print(b.x.name)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-11 15:15:23 | 显示全部楼层

谢了兄弟,我知道了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-11 15:18:33 | 显示全部楼层
zy8818 发表于 2022-11-11 15:15
谢了兄弟,我知道了

???
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-11 16:15:02 | 显示全部楼层

外部调用必须有A类的self指针
你说的那个就是返回了A类的self指针
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-25 18:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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