我应该将哪些数据传递给这个构造函数?
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 构造函数
如何将数据传递给模态以使用bootstrap4.6动态构造模态