class OA:
def __init__(self, app_id, app_secret):
self.client = self.get_client(app_id, app_secret)
def get_client(self, app_id, app_secret):
return 'CLIENT'
class Form(OA):
"""
表单相关的方法
"""
def get_data(self):
return 'self.client.get("xxxx")'
class Process(OA):
"""
审批流程相关的方法
"""
def get_data(self):
return 'self.client.get("xxxx")'
最近在做 OA ,数据分为两大块,一块表单,一块流程。
我想初始化一个 OA 对象
然后调用 oa.form.get_data
来查询表单数据
调用 oa.process.get_data
来查询流程数据
父类调用子类的方法,网上查了很多 差不到
1
infun 2022-09-25 18:54:47 +08:00 via iPhone
可以实现 但是不允许 换个思路吧
|
2
lozzow 2022-09-25 19:00:17 +08:00
可以实现,但是你这个因该是用组合而不是继承把
|
5
infun 2022-09-25 20:15:06 +08:00
|
6
deplivesb 2022-09-25 21:17:58 +08:00
按照你的需求,应该是 OA 继承 Form 和 Process 呀
|
7
joApioVVx4M4X6Rf 2022-09-26 09:21:03 +08:00
用元类实现。继承该父类的子类,能够被元类发现,然后写一个方法根据传进来的参数找到不同的子类,最后调用
|
8
filwaline 2022-09-26 09:38:39 +08:00
组合其实你已经在用了,你在 OA 里声明了的 client 属性,这就是一种组合。同理,你不需要让 Form 去继承 OA ,而是要直接在 OA 里初始化一个 form 属性,这样就直接能够实现调用 oa.form.get_data
你这里指定 Form 去继承 OA ,是图什么?省掉两行代码?还是你以为继承会让 Form 自动注册到 OA 里去? |
9
filwaline 2022-09-26 09:41:52 +08:00 1
@v2exblog metaclass 可太特么黑魔法了,菜鸟去折腾这个怎么死的都不知道。组合通常优于继承,代码应该保持简单直观。
|
10
fkdtz 2022-09-26 14:21:31 +08:00
沿着你的思路的话,不需要上面的继承关系,而应该把 Form 和 Process 对象 set 到 OA 里面,让 OA 持有这些个实例。
|
11
TwoCrowns 2022-09-26 17:26:40 +08:00
我理解写个依赖注入不就行了吗?
|
12
fzzff 2022-10-19 16:33:59 +08:00
简单工厂设计模式
|