作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我遇到了一个有点难以解释的问题。我有一个包含多个类的模块:someModule.py
#imports over here
class Default(Base):
def __init__(self):
a = Rectangle() #all these guys derive from Shape
b = Circle()
c = Sphere()
class Foo:
#members over here
#other classes/functions/whatever we can define here, except the boiler plate code to check __main__
我想做的是在运行时创建一个派生自特定基类(例如 Base)的类的对象,并操作那些派生自另一个特定基类(例如 Shape)的数据成员。意思是我想编写这样一个采用模块名称并执行上述任务的脚本。我有什么想法可以使用检查或其他方法来做到这一点吗?我看了一下 inspect,但没有完全找到应该完成工作的方法。我可能遗漏了一些东西。
最佳答案
在创建实例之前,无法知道 __init__
中的内容。
您只能在之后检查它们,一种方法是使用 vars()
:
defy = Default()
for name,value in vars(defy).items():
if isinstance(value, Shape):
# manipulate
要对 someModule.py 中所有也是 Base
子类的类执行上述操作:
import someModule
instances = []
for cls_name,cls in vars(someModule):
if issubclass(cls, Base):
obj = cls()
for name,value in vars(cls).items():
if isinstance(value, Shape):
# manipulate
instances.append(obj)
相反,如果您想操作哪个 Shape
子类将被实例化,您必须将它们设为类属性,例如:
class Default(Base):
default_shapes = [Rectangle, Circle, Sphere]
def __init__(self):
self.shapes = [shape() for shape in self.__class__.default_shapes]
关于python - 使用反射窥探模块及其类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9147332/
我建立了一个库来做 IGMP 的东西。现在,愚蠢的是,我的图书馆还进行了存在监控以确保其他人仍然是该组的一部分。 IGMP 在较低级别做完全相同的事情。分开消息,轮询路由器它仍然是同一组的一部分,整个
背景: Linux 上的 Python 2.6.6。 DNA 序列分析流程的第一部分。 我想从挂载的远程存储(LAN)中读取一个可能压缩过的文件,如果它是压缩过的;将它压缩到流中(即使用 gunzip
我已经看到这个网站上还有其他一些关于如何监视构造函数的帖子。我明白我应该覆盖外部库原型(prototype)中的构造函数。这就像从外部库中监视函数一样,例如: import * as cp from
我是一名优秀的程序员,十分优秀!