首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Python工厂类继承

Python工厂类继承
EN

Stack Overflow用户
提问于 2019-05-30 02:13:37
回答 2查看 946关注 0票数 2

如何检查一个类是否是由工厂类创建的父类的子类?

考虑以下简单的示例:

代码语言:javascript
运行
AI代码解释
复制
from itertools import count
def basefactory():
    class Base:
        _idc = count(0)
        def __init__(self):
            self._id = next(self._idc)
    return Base

然后使用工厂类创建子类:

代码语言:javascript
运行
AI代码解释
复制
class A(basefactory()):
    def __init__(self):
        super().__init__()

class B(basefactory()):
    def __init__(self):
        super().__init__()

如何测试AB是否是由工厂类创建的类的子类?

如果没有工厂类,我将使用:issubclass(A, Base)),但这当然不适用于工厂类,因为Base不是在全局空间中定义的。

这个设置的原因是我希望AB有一个不同的_idc计数器来为子类的每个实例生成连续的_id

如果AB直接从Base继承,则计数器是共享的。让我举一个例子来说明我的意思。

使用上面描述的工厂类设置,如果我这样做了:

代码语言:javascript
运行
AI代码解释
复制
ll = [A(), A(), B(), B()]   
for e in ll:
    print(e._id, end=", ")

打印:0, 1, 0, 1,。如果我将Base移动到全局空间,而AB直接从Base继承,则前面的代码打印:0, 1, 2, 3,

我希望_id0, 1, 0, 1,,这就是我使用工厂类设置的原因。在我的实际情况中,我不只是AB (我有10个由工厂类创建的类,它们将来可能会增加),所以我不想重复自己,在每个子类中初始化计数器。

但是,如果一个类是通过工厂类创建的,那么我还需要断言一个类是否是Base的子类,或者用其他的术语来说。这就是问题所在。是否可以使用issubclass检查类层次结构?或者我需要改变设置或使用解决办法,就像人们在评论中建议的那样?

关于拟议中的重复

我不认为是() methods的翻版。我知道super做什么,在这种特殊情况下没有用。我希望每个子类都有一个不同的计数器,我看不出引用父类有多大帮助。

也许这是有帮助的(如果是的话,请张贴一个答案),但由于提议的复制不涉及工厂类,我认为这个问题仍然不同。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-06 07:27:13

我认为一个装饰师会做你想做的事情(向一个类添加一个实例计数器),而不是一个工厂函数,它会生成一个本来不必要的基类。

代码语言:javascript
运行
AI代码解释
复制
from itertools import count

def add_counter(cls):
    cls._idc = count(0)
    old_init = cls.__init__
    def __init__(self, *args, **kwargs):
        old_init(self, *args, **kwargs)
        self._id  = next(self._idc)
    cls.__init__ = __init__
    return cls

@add_counter
class A:
    pass

@add_counter
class B:
    pass

ll = [A(), A(), B(), B()]
for e in ll:
    print(e._id, end=", ")
票数 2
EN

Stack Overflow用户

发布于 2019-06-30 09:38:13

嗯,我不知道如何正确地访问这些信息,但是当输入help(A)时,您会得到Base

代码语言:javascript
运行
AI代码解释
复制
Help on class A in module __main__:
class A(Base)
 |  Method resolution order:
 |      A
 |      Base
 |      builtins.object
 |  
 |  Methods inherited from Base:
 |  
 |  __init__(self)
 |  
 |  ----------------------------------------------------------------------
 |  Data descriptors inherited from Base:
 |  
 |  __dict__
 |      dictionary for instance variables (if defined)
 |  
 |  __weakref__
 |      list of weak references to the object (if defined)

我知道必须有可能正确地访问它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56376186

复制
相关文章
jQuery 遍历
jQuery 遍历,意为"移动",用于根据其相对于其他元素的关系来"查找"(或选取)HTML 元素。以某项选择开始,并沿着这个选择移动,直到抵达您期望的元素为止。
陈不成i
2021/07/22
8760
jQuery遍历函数
.closest():从元素本身開始,逐级向上级元素匹配。并返回最先匹配的祖先元素。
全栈程序员站长
2022/07/07
1.1K0
【案例】jQuery+CSS3列表布局切换特效
jQuery+CSS3列表布局切换特效是一款基于jQuery和CSS3模块网格和列表响应式布局切换代码。同学们还想了解哪些网页知识就在后台留言给我吧!
用户1730674
2020/03/26
2.1K0
【案例】jQuery+CSS3列表布局切换特效
jquery tmpl遍历
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/148365.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/02
1.8K0
jQuery 遍历- 过滤
三个最基本的过滤方法是:first(), last() 和 eq(),它们允许您基于其在一组元素中的位置来选择一个特定的元素。
陈不成i
2021/07/22
9910
jQuery 遍历 - 祖先
parents() 方法返回被选元素的所有祖先元素,它一路向上直到文档的根元素 (<html>)。
陈不成i
2021/07/22
6690
jquery树遍历
得到当前匹配的元素集合中每个元素的后代, 由一个选择器,jQuery对象,或元素过滤。
IT工作者
2022/03/02
8850
jQuery 遍历 - 后代
下面的例子返回类名为 "1" 的所有 <p> 元素,并且它们是 <div> 的直接子元素:
陈不成i
2021/07/22
7800
如何锁定表头和表行同时锁定_jquery表头固定列
前段时间需要这个功能,但是找了很多都不能完美的实现,不是只能锁定表头,就是浏览器兼容问题什么的,在此就自己做了一个锁定表头和列的js方法,依赖于JQuery。
全栈程序员站长
2022/09/20
2.5K0
如何锁定表头和表行同时锁定_jquery表头固定列
jQuery遍历List对象
在jQuery中,可以使用each()方法以一种非常直观的方式来模拟break和continue关键字的功能。只需在回调函数中编写一条return语句即可。要停止迭代,只需从回调函数返回false,这与在普通循环语句中使用break语句类似。要跳过当前迭代并继续进行下一轮迭代,只需返回true即可,这与在循环语句中使用continue类似。
别团等shy哥发育
2023/02/25
2.1K0
jQuery遍历List对象
jQuery 遍历 - 同胞(siblings)
prev(), prevAll() 以及 prevUntil() 方法的工作方式与上面的方法类似,只不过方向相反而已:它们返回的是前面的同胞元素(在 DOM 树中沿着同胞之前元素遍历,而不是之后元素遍历)。
陈不成i
2021/07/22
7770
JQuery 学习—$.each遍历学习
生活在这样一个充满欢乐的世界中,我们要有欢乐的精神对待工作和生活! 我们每天晚上睡觉早上起来,每天会重复着做很多的事情,我们的生活在程序的角度看其实就是一个循环,这个循环说简单它就简单,说复杂它就很复杂。今天我要用欢乐的方式来介绍的是JQuery的中的一种技术,JQuery 的$.each遍历操作,不管是搞前端还是搞后端javaWeb方向的程序员(猿),你一定会和它偶遇,在某一个转角。 在通往技术的道路上,一定会听到很多流言蜚语,但是我们一定要坚定自己的信念那就是找到一座灯塔,那个灯塔在我们迷茫徘徊的时候可以指引我们朝着正确的方向,那么在技术中指引我们的灯塔是什么呢?那一定是 官方的文档。 1:文档说明
全栈程序员站长
2022/07/19
1.4K0
JQuery 遍历被选中的checkbox元素
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/details/78819667
泥豆芽儿 MT
2018/09/11
2.2K0
JQuery 遍历被选中的checkbox元素
jQuery 遍历 - siblings() 方法应用
每天写个小demo,最近工作小到1像素,大到n多优化,这个行业真的是有项目的时候忙的要死,没项目的时候闲的发慌,趁着办公室没人的时候,安安静静继续写代码,一个关于jQuery 遍历 - siblings() 方法应用。
王小婷
2019/08/01
8710
jQuery 遍历 - siblings() 方法应用
图的遍历(下)——邻接表
在我的上一篇博客:图的遍历(上)——邻接矩阵 中主要介绍了邻接矩阵的BFS和递归的DFS与非递归的DFS这3种遍历算法。在这篇博客我将主要叙述邻接表的以上3中遍历算法。首先来看看邻接表的表示方法。
AI那点小事
2020/04/20
9320
图的遍历(下)——邻接表
如何生成A-AZ列 excel表的列 不用序号的那种?
前几天在Python最强王者交流群【逸】问了一个Pyhton处理Excel的问题,这里拿出来给大家分享下。
前端皮皮
2022/12/19
1.8K0
如何生成A-AZ列 excel表的列 不用序号的那种?
前端基础-JQuery(each方法遍历)
第7章 each方法遍历 jQuery的隐式迭代会对所有的DOM对象设置相同的值,但是如果我们需要给每一个对象设置不同的值的时候,就需要自己进行迭代了。 作用:遍历jQuery对象集合,为每个匹配的元素执行一个函数 // 参数一表示当前元素在所有匹配元素中的索引号 // 参数二表示当前元素(DOM对象) $(selector).each(function(index,element){});
cwl_java
2020/03/26
1.3K0
pandas按行按列遍历Dataframe的几种方式
iterrows(): 按行遍历,将DataFrame的每一行迭代为(index, Series)对,可以通过row[name]对元素进行访问。 itertuples(): 按行遍历,将DataFrame的每一行迭代为元祖,可以通过row[name]对元素进行访问,比iterrows()效率高。 iteritems():按列遍历,将DataFrame的每一列迭代为(列名, Series)对,可以通过row[index]对元素进行访问。 示例数据
kirin
2021/04/30
7.2K0
JQuery跳出each循环的方法(包含数组遍历)
break----用return false;  continue --用return ture;
ydymz
2018/09/10
3K0
Hash表(二)——散列冲突
在Hash表(一)——Hash函数已经分析了散列冲突产生的原因,我们一般使用开放寻址法和链表法来解决。
用户3470542
2019/07/10
1.4K0
Hash表(二)——散列冲突

相似问题

jquery遍历表中的单元格列。

20

jquery遍历表

30

JQuery遍历表

10

JQuery表遍历

10

在jQuery中遍历表中的第二列

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文