首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何获取更新字典的类方法?

如何获取更新字典的类方法?
EN

Stack Overflow用户
提问于 2018-06-11 00:00:31
回答 1查看 302关注 0票数 0

我正在尝试制作一个灵活的参数解析器,它接受字符串,在其中查找参数,并创建一个字典,如下所示:

代码语言:javascript
复制
message = "--mass=12"
physics = comparse(message, "mass", "int", 10, "this is your mass attribute")

产品:{'mass': 12}

我无法更新和添加更多的参数/键(就像我想要添加一个'vel‘变量)。不幸的是,我是Python类的新手,虽然解析器可以检测到第一个参数,但我无法添加到字典中。下面是我的程序:

代码语言:javascript
复制
import shlex
class comparse(object):
    def __init__(self, message, attribute, var_type, default, help_txt):
        self.data = {}   #This is the "data" dictionary that this function will ultimately return.
        self.message = message
        self.attribute = attribute
        self.var_type = var_type
        self.default = default
        self.help_txt = help_txt

        #Remove unwanted symbols (e.g. "=", ":", etc.)
        self.message = self.message.replace("=", " ")
        self.message = self.message.replace(":", " ")
        self.args = shlex.split(self.message)

    def parse(self):  
        try:
            options = {k.strip('-'): True if v.startswith('-') else v
                for k,v in zip(self.args, self.args[1:]+["--"]) if k.startswith('-') or k.startswith('')}
            if (self.var_type == "int"):
                self.data[self.attribute] = int(options[self.attribute])   #Updates if "attribute" exists, else adds "attribute".
            if (self.var_type == "str"):
                self.data[self.attribute] = str(options[self.attribute])   #Updates if "attribute" exists, else adds "attribute".  
        except:
            if self.attribute not in self.message:
                if (self.var_type == "int"):
                    self.data[self.attribute] = int(self.default)   #Updates if "x" exists, else adds "x".
                if (self.var_type == "str"):
                    self.data[self.attribute] = str(self.default)   #Updates if "x" exists, else adds "x".
        return self.data

    def add_argument(self):
        self.data.update(self.data)

message = "-mass: 12 --vel= 18"

physics = comparse(message, "mass", "int", 10, "this is your mass attribute")
comparse.add_argument(message, "vel", "int", 10, "this is your velocity attribute")
print (physics.parse())

comparse.add_argument方法不起作用。很明显,我做错了什么,而类通常会让我感到困惑!有人能指出我的程序出了什么问题吗?

EN

回答 1

Stack Overflow用户

发布于 2018-06-11 00:04:17

在您给出的以下代码中

代码语言:javascript
复制
def add_argument(self):
        self.data.update(self.data)

add_argument不需要任何arguments.But,您已经完成了fllowing

代码语言:javascript
复制
comparse.add_argument(message, "vel", "int", 10, "this is your velocity attribute")

你已经给出了多个参数。这就是问题的原因。

要修复此问题,请尝试修改add_argument函数以接受您希望其处理的参数

编辑:根据您的评论,函数应该是

代码语言:javascript
复制
def add_argument(self,message, attribute, var_type, default, help_txt):
    data = comparse.parse(message, attribute, var_type, default, help_txt) 
    self.data.update(data) 

但是,在这里,解析方法实际上在您的代码中不接受任何参数,so..modify它以接受您需要的所有参数以及self

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50785533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档