如果我有这样的课程:
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)
正确?
答案 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