鱼C论坛

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

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

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

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

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

x
class A:
    def __init__(self,name):
        print(name)
        self.name=name
    def __get__(a,b,c):
        print(a,b,c)


class B:
    x=A("aa")
    

   
b=B()
b.x
b.x.name
aa
<__main__.A object at 0x0000015A3C6D6A70> <__main__.B object at 0x0000015A3C6D6AA0> <class '__main__.B'>
<__main__.A object at 0x0000015A3C6D6A70> <__main__.B object at 0x0000015A3C6D6AA0> <class '__main__.B'>
Traceback (most recent call last):
  File "C:/Users/zy118/AppData/Local/Programs/Python/Python310/111.py", line 16, in <module>
    b.x.name
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__() 得有返回值
class A:
    def __init__(self , name):
        self . name = name

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

b = B()
print(b . x)          # b . x 就是 A . name
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

class B:
    x = A("aa")

b = B()
print(b . x . name)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

这样是可以,我想知道为什么加了get后就不行了,没有解决方法吗?加了get后就只能当花瓶看了吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


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

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

b = B()
print(b . x)          # b . x 就是 A . name
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


class B:
    x=A("aa")
    

   
b=B()
b.x
print(b.x.name)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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

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

使用道具 举报

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

外部调用必须有A类的self指针
你说的那个就是返回了A类的self指针
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-25 17:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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