我想要做什么
考虑一个带有行的文件:
A B C value
A B D value
是否可以创建一个能够访问如下值的结构:
A.B.C.val()
A.B.D.val()
考虑到它们A, B, C, D是容器(如窗体、窗口等),我希望能够通过使用这种结构来获取每个元素路径。
我在问什么
最后,我想知道的是,如果有一个类(比如说generic),我是否可以在运行时创建一个名为A(从文件中读取的名称,可以是任何东西)的继承类,然后它将不复存在(最后一个部分并不重要)?
我想要做什么
考虑一个带有行的文件:
A B C value
A B D value
是否可以创建一个能够访问如下值的结构:
A.B.C.val()
A.B.D.val()
考虑到它们A, B, C, D是容器(如窗体、窗口等),我希望能够通过使用这种结构来获取每个元素路径。
我在问什么
最后,我想知道的是,如果有一个类(比如说generic),我是否可以在运行时创建一个名为A(从文件中读取的名称,可以是任何东西)的继承类,然后它将不复存在(最后一个部分并不重要)?
那是你要找的吗?
# Generic class definition
class Generic (object):
value = None
@classmethod
def val(cls):
return int(cls.value)
# Top level class
TopLevelClass = type('TopLevelClass',
(Generic, ), {})
lines = ["A B C 42",
"A B D 43"]
for line in lines:
# Parse the line
path = line.split()[:-1]
value = line.split()[-1]
# Create the classes
current = TopLevelClass
for x in path:
if hasattr(current,x):
current = getattr(current,x)
else:
cls = type(x, (Generic, ), {})
setattr(current,x,cls)
current = cls
# Apply value
setattr(cls,'value',value)
# Test
print(TopLevelClass.A.B.C.val())
print(TopLevelClass.A.B.D.val())
输出 :
>>> 42
>>> 43