我应该将哪些数据传递给这个构造函数?

Posted

技术标签:

【中文标题】我应该将哪些数据传递给这个构造函数?【英文标题】:What data should I pass to this constructor? 【发布时间】:2022-01-16 12:54:06 【问题描述】:

我正在尝试使用函数 init 创建一个新实体。 但我不知道我应该给什么“e”。 “e”必须是一个元组。但是我怎么知道它长什么样呢?

class entity_instance(object):
    def __init__(self, e):
        if isinstance(e, tuple):
            e = ifcopenshell_wrapper.new_IfcBaseClass(*e)
        super(entity_instance, self).__setattr__('wrapped_data', e)

这里是函数 new_IfcBaseClass:

def new_IfcBaseClass(schema_identifier, name):
"""new_IfcBaseClass(std::string const & schema_identifier, std::string const & name) -> entity_instance"""
    return _ifcopenshell_wrapper.new_IfcBaseClass(schema_identifier, name)

这是我的主要代码:

import ifcopenshell
from ifcopenshell import entity_instance
ifc=ifcopenshell.open('file.ifc')
Object = entity_instance()
entity_instance.__init__(('#1','ifctoken'))

我给了一个随机元组来测试,我是否可以构建一个新的 entify_instance。但我得到“init() missing 1 required positional argument: 'e'”作为错误消息。

【问题讨论】:

当你试图传递一个元组时出现了什么问题? 那么,ifcopenshell_wrapper.new_IfcBaseClass 来自哪里?您是否尝试过阅读文档?我们无法告诉您有关此代码的任何信息,因为您没有向我们展示,我们也无法知道它的来源。 您似乎尝试过ask this question before。之前不清楚你想做什么,现在更不清楚了。 @mkrieger 我尝试使用随机元组。我得到“__init__() missing 1 required positional argument: 'e'” 作为错误 请显示您尝试过的代码的minimal reproducible example。 【参考方案1】:

您不应直接致电__init__。这是一个“dunder”(指两边的双下划线)或“magical”(指的是他们添加的行为只是“神奇地”起作用而没有实际调用它的事实)方法。

__init__ 在你实例化一个对象时被调用,所以你的代码是:

import ifcopenshell
from ifcopenshell import entity_instance
ifc=ifcopenshell.open('file.ifc')
Object = entity_instance(('#1','ifctoken'))

我实际上并没有对此进行测试,因为我没有 .ifc 文件(或安装了 ifcopenshell),但由于您的问题更像是一个通用的 Python 问题,我相当肯定这至少是您的问题的一部分。

请注意,我没有更改命名,但 Object 对于变量来说是一个非常糟糕的选择——大写的“O”表明它实际上是一个类(当它是一个实例时),而“object”是关于尽可能通用 - 即使这样 object 也将是一个非常糟糕的选择,因为它会影响 Python 中的 object 超级类型。

【讨论】:

感谢您提供丰富的答案!

以上是关于我应该将哪些数据传递给这个构造函数?的主要内容,如果未能解决你的问题,请参考以下文章

Android - 在 onCreateViewHolder(..) 中将数据传递给 ViewHolder 构造函数

在将数据传递给类构造函数之前,先在Python中预处理数据

将二进制数据传递给非二进制安全函数都有哪些安全隐患?

如何将数据传递给模态以使用bootstrap4.6动态构造模态

在 Symfony 2.8、3.0 及更高版本中将数据传递给 buildForm()

easyui怎么将前台表单数据传递给后台