属性访问的重写问题 小甲鱼代码中疑惑
本帖最后由 minamikotori 于 2022-5-1 19:36 编辑小甲鱼的代码中,重写了父类的魔法方法
例如说若 不重写这几个魔法方法,那不应该是继承了基类的这些魔法方法(就是相当于没有print的环节)
那为什么不能直接在外面创建没有的属性
而是只有在 加上return 基类的魔法方法,这时才可以在外面随意创建属性
小甲鱼的代码中重写不就是仅仅加上了一句print吗 和直接继承后调用有什么区别呢
是的,虽然看起来也可以,但小甲鱼这里是教你如何自己定义想要的方法,直接继承就没有这个效果 —— print(),
所以这还是有挺大区别的 python爱好者. 发表于 2022-5-1 19:28
是的,虽然看起来也可以,但小甲鱼这里是教你如何自己定义想要的方法,直接继承就没有这个效果 —— print( ...
但是直接继承我并不能去访问C.x
会返回x属性不存在啊 你不重写的话,确实默认是继承了基类(object类)的方法,
而小甲鱼的代码中也是调用了基类的方法,所以小甲鱼这里是为了给你演示怎么重写魔法方法,
那个 print 是为了更清楚的看到 魔法方法 在什么时候被调用,
你不重写的话也可以添加属性,但是你如果重写的话就必须得调用基类的方法,
因为设置属性这些是底层写好了的,你只能添加自己额外的逻辑,
设置属性还是得靠基类的方法 minamikotori 发表于 2022-5-1 19:30
但是直接继承我并不能去访问C.x
会返回x属性不存在啊
所以自己写 当获取这个类中属性 的代码时,就能控制报错,更有个性 isdkz 发表于 2022-5-1 19:31
你不重写的话,确实默认是继承了基类(object类)的方法,
而小甲鱼的代码中也是调用了基类的方法,所以 ...
对 我明白小甲鱼的意思
我的疑惑是 不去定义x 而可以访问(设置)属性x是基类的方法给的么
如果是的话,我不去重写,那基类的方法是不是也允许我不去定义x而访问(设置)属性x
然而 实际上返回给我x属性不存在了? python爱好者. 发表于 2022-5-1 19:31
所以自己写 当获取这个类中属性 的代码时,就能控制报错,更有个性
嗯 但是自己写的话 以小甲鱼的案例只是在基类的方法前加了个print 那为什么可以控制报错呢? minamikotori 发表于 2022-5-1 19:30
但是直接继承我并不能去访问C.x
会返回x属性不存在啊
你得创建了这个属性才可以访问呀,
小甲鱼的代码之所以没有报错是因为 __getattr__ 中没有调用基类的 __getattr__,
所以实际上并没有访问属性,
你在 print("getattr") 的下面加上一句 super().__getattr__(name) 就知道了
minamikotori 发表于 2022-5-1 19:34
对 我明白小甲鱼的意思
我的疑惑是 不去定义x 而可以访问(设置)属性x是基类的方法给的么
如果是的话 ...
基类的定义是:
当此属性没有被定义且被访问或修改就给出报错 {:5_107:}我什么时候运气变这么好了 让我理一理{:10_323:} isdkz 发表于 2022-5-1 19:37
我什么时候运气变这么好了
乐于助人的"报应"{:10_256:} isdkz 发表于 2022-5-1 19:37
我什么时候运气变这么好了
哈哈 概率被我偷偷改成100了 isdkz 发表于 2022-5-1 19:37
我什么时候运气变这么好了
哈哈 概率被我偷偷改成100%了 python爱好者. 发表于 2022-5-1 19:38
乐于助人的"报应"
{:10_256:}
页:
[1]