请教一下这个代码中self的问题,实在没懂。。
class A:x = 666
def __get__(self, instance, owner):
print('get~')
return A
def __getattribute__(self, item):
#print (self,'SELF')
print('getattribute a')
return super().__getattribute__(item)
class B:
a = A()
def __getattribute__(self, item):
if item=='a':
print('getattribute b')
return super().__getattribute__(item)
b = B()
print(b.a.x)
''' 这是return A改成return self的结果
getattribute b
get~
getattribute a
666
''' 码下我的问题:1.return self ,和第十五行的return语句为啥print打印没东西,就是没返回值不是改打印个none吗?
2.我是理解的b.a.x他的触发流程是先__get___,__get__的返回值会传递给下一个__getattribute__做self,但是我改了return self 为return A后,不知道为什么七八行代码不运行了,但是__getattribute__最后一行正常运行,返回了666?(return A程序运行结果:getattribute b
get~
666)请问我之前理解的思路错了吗?return A为啥78行不运行??
{:9_220:} 第二个问题,我这么理解是自己把自己说服了为啥__get__魔法方法不写return语句会报错:AttributeError: 'NoneType' object has no attribute 'x',如果理解有问题麻烦顺便给我讲解一下这个报错是咋回事,拜谢{:9_220:} 我怎么感觉得你一个劲地自己瞎搞呢? 自学的?没老师教?self还没搞清楚,就折腾这些特殊方法?
为什么不先找教程,找例子,先搞清楚基本概念,再搞这些特殊方法(又或者,现阶段你有必要深究这些吗)?
{:10_245:} 阿奇_o 发表于 2021-7-21 20:29
我怎么感觉得你一个劲地自己瞎搞呢? 自学的?没老师教?self还没搞清楚,就折腾这些特殊方法?
为什么 ...
看着小甲鱼的视频在学,视频里不是列了扩展阅读里面魔法方法的一张表嘛,我就说一个个试,试到__get__就卡了,一堆问题{:9_220:} 阿奇_o 发表于 2021-7-21 20:29
我怎么感觉得你一个劲地自己瞎搞呢? 自学的?没老师教?self还没搞清楚,就折腾这些特殊方法?
为什么 ...
我想的学基础把能弄懂的都弄懂,self我理解的就是传入的对象,像是实例对象.方法会自动传入自身做self,但是不是有__new__方法的参数会原封不动的传给__init__嘛,我就想这个是不是也是这个道理。。 阿奇_o 发表于 2021-7-21 20:29
我怎么感觉得你一个劲地自己瞎搞呢? 自学的?没老师教?self还没搞清楚,就折腾这些特殊方法?
为什么 ...
我也找了百度,解释的也看不懂,rnoob.com上没找到相关魔法方法的例子,{:9_220:} 你在A.get里面返回什么B.a就是什么
你要求b.a.x 就是求(B.a).x就是求的(A.get里return的东西).x
所以我才提议return self 不然x拿不到
至于__getattribute__就是一个递归的搅屎棍方法
从来没用过 但是只要定义了就一定先被执行
返回如果是None再才有其他的
几乎99%的方法__getattribute__没定义
也就是你super().__getattribute__估计也没定义返回的None kogawananari 发表于 2021-7-22 00:44
你在A.get里面返回什么B.a就是什么
你要求b.a.x 就是求(B.a).x就是求的(A.get里return的东西).x ...
那这个return self ,不会被打印吗??
页:
[1]