
新手求教 python3 问题
我希望获去 A 的子类 Info 按照逻辑 A 继承了 ABC ,Info 继承了 A,那 Info 既是 A 的子类也是 ABC 的子类, 但是实际结果却是 Info 是 ABC 的子类却不是 A 的子类,求解
因为实际业务中我有很多子类需要继承 A,都写在一个文件里面就很臃肿,所以并不希望使用第二种情况
希望大家帮忙看下是啥问题,或者有什么方式能实现我的逻辑 逻辑为:在 A 中能获取他所有的子类并且能调用子类的方法
python 我是新手,比较菜,大佬勿喷哈
main/alfred/file/A.py
#!/usr/local/bin/python3 # coding=utf-8 from abc import ABC, abstractmethod import importlib, inspect from main.alfred.file import Info class A(ABC): result = None class B(A): result = None if __name__ == '__main__': info_info = Info.Info subclass = issubclass(info_info, A) subclass2 = issubclass(info_info, ABC) print("info extend A %s" % subclass) print("info extend ABC %s " % subclass2) subclass3 = issubclass(B, A) subclass4 = issubclass(B, ABC) print("B extend A %s" % subclass3) print("B extend ABC %s " % subclass4) 包路径 main/alfred/file/Info.py
#!/usr/local/bin/python3 # coding=utf-8 from main.alfred.file.A import A class Info(A): result = None 输出结果
Connected to pydev debugger (build 203.7148.57) info extend A False info extend ABC True B extend A True B extend ABC True 1 ll5270 2023-04-07 18:54:47 +08:00 你这不会循环引用吗? |
2 Anarchy 2023-04-07 18:56:22 +08:00 via Android 我觉得你先说清楚你想要的效果吧,感觉核心问题和继承没关系你需要一些设计模式来解决。 |
3 xurunfei OP |
4 xurunfei OP 我想要的功能是比较简单,就是 a 是父类 b c d 是子类,我要在 a 中直接通过一个方法获取 b c d 所有类并调用他们的方法 |
5 stein42 2023-04-07 19:34:20 +08:00 这是循环 import 带来的问题,info_info 的基类就不是 A 。 print(info_info.__base__ is A) print(info_info.__base__) print(A) python 没报错是 python 的问题。 |
6 4BVL25L90W260T9U 2023-04-07 19:44:58 +08:00 现在不流行继承了,你这都是反模式。 |
7 xurunfei OP |
8 bestcondition 2023-04-07 23:55:05 +08:00 via Android @stein42 学到了,一个是模块 A 下的 A ,一个是作为 main 下的 A ,竟然不是同一个 A |
9 Anarchy 2023-04-08 10:47:52 +08:00 @xurunfei 所以我理解你想要 A 类方法调用后可以把 B 、C 、D 方法都调用一遍。其实继续用 JAVA 思路设计就是搞个 S 作为接口,ABCD 都实现 S ,然后在 A 的实现里注册 BCD 放在一个列表里,再由 A 处理 BCD 的调用。 |
12 xurunfei OP 也谢谢其他帮忙的老哥 |