新手求教 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 2
这是循环 import 带来的问题,info_info 的基类就不是 A 。
print(info_info.__base__ is A) print(info_info.__base__) print(A) python 没报错是 python 的问题。 |
6
ospider 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 也谢谢其他帮忙的老哥
|