【问题标题】:How to take the string from input of argparse and use it as an object如何从 argparse 的输入中获取字符串并将其用作对象
【发布时间】:2019-01-03 19:40:48
【问题描述】:

我正在尝试创建一个程序,该程序从 argparse 输入中读取字符串并使用该字符串调用某个对象并将该对象用于函数的其余部分。

 #!/usr/bin/python
import argparse

class car:
    def __init__(self, color, year):
        self.color = color
        self.year = year

Beatle = car("blue", 1973)

parser = argparse.ArgumentParser()
parser.add_argument("--vehicleType")
args = parser.parse_args()

print("This "+args.vehicleType+ " is nice")
print("It was made:")
print(2018-args.vehicleType.year)
print("years ago")

但是,我不断收到此错误:

   Traceback (most recent call last):
  File "./test.py", line 17, in <module>
    print(2018-args.vehicleType.year)
AttributeError: 'str' object has no attribute 'year'

我认为程序将 args.vehicleType 作为字符串读取,而我想将其作为对象读取。我该如何解决这个问题? - 干杯,并提前感谢! 〜哦。油炸

【问题讨论】:

  • 是的,args.vehicleType 是一个字符串。将这样的字符串映射到像Beatle 这样的对象是您自己的代码的责任。变量名Beatle 引用了car 对象。字符串 'Beattle' 没有引用它。
  • 如何将字符串映射到对象上?
  • 带字典。
  • 你能解释一下吗?
  • 你懂字典吗? Argparse 只是告诉你用户想要什么。由你来做点什么。

标签: python object command-line argparse


【解决方案1】:

之后是否可以实际创建对象?大致如下:

#!/usr/bin/python
import argparse
class car:
    def __init__(self, color, year, type):
        self.color = color
        self.year = year
        self.type = type

parser = argparse.ArgumentParser()
parser.add_argument("--vehicleType") # Accept the argument as vehicle type.
args = parser.parse_args()

Beatle = car("blue", 1973, str(args.vehicleType)) # Now create the object.

print("This " + Beatle.type+ " is nice") # Use it here.
print("It was made:")
print(2018-Beatle.year) # And here.
print("years ago.")

【讨论】:

  • 是的,这似乎很有用,谢谢!你能解释一下 dest 是什么吗?我真的不明白...
  • 等等,我不这么认为。因为如果我添加另一个类车辆实例,我将需要更改其中的数据——这意味着它们不能是“蓝色”和 1973 年
  • 对不起,你实际上不需要 dest。仅供参考:docs.python.org/3.6/library/argparse.html#dest
  • 等等,我不这么认为。因为如果我添加另一个类车辆实例,我将需要更改其中的数据——这意味着它们不能是“蓝色”和 1973 年
  • 很抱歉,我不明白那条评论。你特别想达到什么目标?
【解决方案2】:

制作汽车字典

adict = {'beattle': car('blue',1973), 'ford': car('black', 1907),...}

yourcar = adict[args.vehicleType]
print(yourcar.year)

【讨论】:

    猜你喜欢
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    • 2021-05-06
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    • 2013-02-04
    • 2021-07-24
    相关资源
    最近更新 更多