将字符串参数传递给类/函数(Python)

时间:2018-02-17 05:44:46

标签: python

如果我有这样的课程:

class Sample:
    def __init__(self, a, b, c):
        self.a = a
        self.b = b
        self.c = c

我可以通过以下方式创建一个对象:

temp = Sample(a=100,b=100,c=100)

但如果我有:

my_str = "a=100,b=100,c=100"

我怎样才能temp = Sample(my_str)正确?

5 个答案:

答案 0 :(得分:3)

您可以解析和评估字符串,如:

代码:

@classmethod
def from_str(cls, a_str):
    return cls(**eval("dict({})".format(a_str)))

测试代码:

class Sample:
    def __init__(self, a, b, c):
        self.a = a
        self.b = b
        self.c = c

    @classmethod
    def from_str(cls, a_str):
        return cls(**eval("dict({})".format(a_str)))

x = Sample.from_str("a=100,b=100,c=100")
print(x.a)

结果:

100

答案 1 :(得分:1)

使用eval

temp = eval("Sample("+my_str+")")

答案 2 :(得分:1)

尽管使用eval can be dangerous绝对是一种选择。这是一个@StephenRauch代码的选项,只是没有使用eval

>>> class Sample:
...     def __init__(self, a, b, c):
...         self.a = a
...         self.b = b
...         self.c = c
... 
...     @classmethod
...     def from_str(cls, a_str):
...         result = {}
...         for kv in a_str.split(','):
...             k, v = kv.split('=')
...             result[k] = int(v)
...         return cls(**result)
... 
>>> x = Sample.from_str('a=100,b=100,c=100')
>>> x.a
100
>>> type(x.a)
<class 'int'>

答案 3 :(得分:0)

您可以使用以下代码。

class Sample:
    def __init__(self, a, b, c):
        self.a = int(a)
        self.b = int(b)
        self.c = int(c)

mystr = "a=100,b=100,c=100"
temp = Sample(mystr.split(",")[0].split("=")[1],mystr.split(",")[1].split("=")[1],mystr.split(",")[2].split("=")[1])
print(temp.a)
print(temp.b)
print(temp.c)

在行动here

中查看

答案 4 :(得分:0)

这对我有用:

my_str = "a=100,b=100,c=100"                                                                                         

temp = Sample(int(my_str.split(',')[0].split('=')[1]),
               int(my_str.split(',')[1].split('=')[1]),
               int(my_str.split(',')[2].split('=')[1]))

print(temp.a)
# prints 100

print(temp.b)
# prints 100

print(temp.c)
# prints 100