Python的define_方法的等价物

2024-09-30 01:18:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我用ruby编写了以下代码:

class Package

def initialize(name)
    @name = name
    @elements = []
end

[:type, :block].each do |bindtype|
    define_method "get_#{bindtype}_by_name" do |name|
        get_by_name(name, bindtype)
    end
end

def get_by_name(name, bindtype=nil)
    @elements.each do |element|
        return if element.name == name
    end
    return nil
end

我读过这个问题about define_method in python,我想用我的Ruby代码在Python中实现同样的事情:

^{pr2}$

我把这个函数叫做:

^{3}$

但显然这行不通,因为我无法恢复正在搜索的元素的名称。有人能帮助我更好地理解这个python define_方法是如何与我的代码一起工作的吗?在


Tags: 代码namegetbyreturndefelementselement
1条回答
网友
1楼 · 发布于 2024-09-30 01:18:43

您就快到了;将bindtype值绑定为函数参数的默认值,然后您想在self上调用get_by_name()

for bindtype in bindtypes:
    def _in_bindtype(self, name, bindtype=bindtype):
        self.get_by_name(name, bindtype)
    setattr(Package, "get_{}_by_name".format(bindtype), _in_bindtype)

我冒昧地使用str.format()来格式化方法名,而不是使用+串联,我发现它更具可读性。在

或者,在python3中,您可以只创建^{} objects

^{pr2}$

相关问题 更多 >

    热门问题