m = inspect.getmembers(module, inspect.isfunction)是什么意思
时间: 2023-05-24 19:04:20 浏览: 72
这行代码的意思是,调用inspect模块的getmembers方法,将一个模块对象module作为第一个参数传入,以函数为筛选条件(inspect.isfunction)来获取该模块中所有的函数对象并返回。返回结果是一个由元组组成的列表,每个元组包括函数名和函数对象两个元素。
相关问题
class ApprovalFlow(models.Model): _name = 'approval.flow' _description = u'审批流程' def _compute_domain(self): all_cls = inspect.getmembers(sys.modules[__name__], inspect.isclass) odoo_cls = [getattr(cls[1], '_name') for cls in all_cls if cls[1].__bases__[0].__name__ == 'Model'] # 排除当前的对象 odoo_cls += [model.model for model in self.env['ir.model'].search([('transient', '=', True)])] # 排除临时对象 return [('model', 'not in', odoo_cls)] name = fields.Char(u'名称') model_id = fields.Many2one('ir.model', u'模型', domain=_compute_domain, index=1) model_name = fields.Char(related="model_id.model", string='模型名称') condition = fields.Char(u'条件', help=u'请遵循odoo的domain的写法,如:[("field_name", "=", value)]',store=True) on_create = fields.Boolean(u'创建时', default=False, help=u'记录创建时创建审批流程') company_ids = fields.Many2many('res.company', 'approval_flow_company_rel', 'flow_id', 'company_id', u'适用公司', default=lambda self: [self.env.company.id]) node_ids = fields.One2many('approval.flow.node', 'flow_id', u'流程节点', copy=False) action_ids = fields.One2many('approval.flow.node.action', 'flow_id', u'节点动作', copy=False) commit_approval_group_id = fields.Many2one('res.groups', u'提交审批组', help=u'执行提交审批的组,如果未指定,则记录所属公司的所有用户都可以提交审批') approval_can_run_id = fields.Many2one('execute.function.list', u'完成后能执行方法', help=u'审批流程完成后才能执行的功能,比如确认订单等') approval_can_run = fields.Char(u'完成后能执行方法', help=u'审批流程完成后才能执行的功能,比如确认订单等',related='approval_can_run_id.fun_name',store=True) approval_cannot_run_id = fields.Many2many('execute.function.not.list', 'function_not_rel', u'完成后不能执行操作', help=u'审批流程完成后不能能执行的操作,修改,删除') approval_cannot_run = fields.Char(u'完成后不能执行操作', help=u'审批流程完成后不能能执行的操作,修改,删除',store=True) def unlink(self): audit = self.env['approval.flow'] for record in audit: if record.approval_can_run_id == '删除': raise UserError("不能删除") return super(Rokedispatchordermanagement, self).unlink() 重新删除方法不能删除approval_can_run_id值等于删除的怎么写
您可以这样重新编写 `unlink` 方法:
```python
def unlink(self):
for record in self:
if record.approval_can_run == '删除':
raise UserError("不能删除")
return super(ApprovalFlow, self).unlink()
```
这里需要注意的是,在 `for` 循环中的 `self` 已经是 `approval.flow` 记录集了,不需要再定义一个 `audit` 变量。同时,您需要判断 `approval_can_run` 而不是 `approval_can_run_id`,因为 `approval_can_run` 才是存储了实际值的字段。
inspect的命令行界面
inspect模块是Python的一个内置模块,它提供了一些用于获取对象信息的函数。inspect模块中的命令行界面可以通过命令行来查看和探索Python对象的结构和属性。
inspect模块的命令行界面提供了以下几个主要的函数:
1. `inspect.getmembers(object[, predicate])`:返回一个对象的成员列表,包括属性、方法和内部类等。可以通过可选的`predicate`参数来过滤返回的成员列表。
2. `inspect.ismodule(object)`:判断一个对象是否是模块。
3. `inspect.isclass(object)`:判断一个对象是否是类。
4. `inspect.isfunction(object)`:判断一个对象是否是函数。
5. `inspect.ismethod(object)`:判断一个对象是否是方法。
6. `inspect.isbuiltin(object)`:判断一个对象是否是内置函数或方法。
7. `inspect.isroutine(object)`:判断一个对象是否是函数、方法或者内置函数。
8. `inspect.getsource(object)`:返回一个对象的源代码。
9. `inspect.getfile(object)`:返回一个对象所在的文件路径。
10. `inspect.getdoc(object)`:返回一个对象的文档字符串。
这些函数可以通过命令行界面来查看和探索Python对象的结构和属性。你可以在命令行中导入`inspect`模块,然后使用这些函数来获取对象的信息。
例如,你可以使用`inspect.getmembers()`函数来获取一个模块的成员列表,然后使用`inspect.getsource()`函数来获取某个函数的源代码。
请注意,inspect模块的命令行界面主要用于开发和调试过程中的对象探索和分析,对于普通的应用程序开发来说,一般不需要直接使用这些函数。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)