zy8818 发表于 2022-11-11 12:35:27

嵌套实例属性访问问题

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'

jackz007 发表于 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)

zy8818 发表于 2022-11-11 12:52:10

jackz007 发表于 2022-11-11 12:47


这样是可以,我想知道为什么加了get后就不行了,没有解决方法吗?加了get后就只能当花瓶看了吗?

jackz007 发表于 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

hrpzcf 发表于 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)

zy8818 发表于 2022-11-11 15:15:23

hrpzcf 发表于 2022-11-11 13:47


谢了兄弟,我知道了

hrpzcf 发表于 2022-11-11 15:18:33

zy8818 发表于 2022-11-11 15:15
谢了兄弟,我知道了

???

zy8818 发表于 2022-11-11 16:15:02

hrpzcf 发表于 2022-11-11 15:18
???

外部调用必须有A类的self指针
你说的那个就是返回了A类的self指针
页: [1]
查看完整版本: 嵌套实例属性访问问题