新建一个 python 的 package,在 package 中创建了一个 Animal.py 的文件,并在 Animal.py 文件中定义了一个 Animal 的类;
------Animal.py-------
class Animal:
def __init__(self, name=None):
self.name = name
def introduce(self):
pass
与此同时在 package 下面,创建了 Dog.py,Cat.py,分别在文件中定义了 Dog,Cat 子类(均继承 Animal),并实现了 introduce 方法
-----Dog.py--------
from animal.animal import Animal
class Dog(Animal):
def introduce(self):
print("i am a dog")
----Cat.py------
from animal.animal import Animal
class Cat(Animal):
def introduce(self):
print("i am a cat")
1
gwy15 2021-01-15 18:59:19 +08:00
Animal.__subclasses__()
|
3
BBrother 2021-01-15 19:12:26 +08:00
__subclasses__ +1
复杂一点的可以用元类: https://www.verybin.com/?886efe270afffde5#3fG4Lzpe9+QiIhqC4U4y0QJyHXYXddwchnFraPMULAk= |
5
RickyHao 2021-01-15 19:26:11 +08:00 via Android
你不 import,那这代码就相当于不存在吧?
实在不行,规定个文件夹,启动的时候自动 import 文件夹下的所有代码文件 |
6
xchaoinfo 2021-01-15 19:29:22 +08:00 via Android
不引入,不实例化,ast 了解下
|
7
maocat 2021-01-15 19:29:43 +08:00 via Android
|
8
dwadewyp OP |
10
dwadewyp OP |
11
maocat 2021-01-16 17:25:19 +08:00 via Android
|
12
tmackan 2021-01-16 18:24:58 +08:00
@xchaoinfo 专业
@dwadewyp py 中有个 inspect 的反射包,但是看了下文档,没办法满足你的需求 https://www.cnblogs.com/yaohong/p/8874154.html |
14
dwadewyp OP 已解决:
在 animal __init__.py ``` import os import pkgutil pkgpath = os.path.dirname(__file__) pkgname = os.path.basename(pkgpath) for _, file, _ in pkgutil.iter_modules([pkgpath]): __import__(pkgname+'.'+file) ``` |
15
julyclyde 2021-01-18 14:21:20 +08:00
安装包的时候注册 entrypoint,然后 init 阶段遍历加载
|