【发布时间】:2014-01-19 01:13:48
【问题描述】:
我可以动态创建类定义,就像那里:
class_name = 'Human'
base_classes = (object,)
attributes = {'name':'',
'books':list(),
'say_hello':lambda self: sys.stdout.write('Hello!')}
Human = type(class_name, base_classes, attributes)
uzumaxy = Human()
uzumaxy.name = 'Maxim'
uzumaxy.books.append('Programming via .NET')
print(uzumaxy.name) # Out: "Maxim"
print(uzumaxy.books) # Out: "['Programming via .NET']"
grandrey = Human()
grandrey.name = 'Andrey'
grandrey.books.append('Programming via python')
print(grandrey.name) # Out: "Andrey"
print(uzumaxy.name) # Out: "Maxim"
print(grandrey.books) # Out: "['Programming via .NET', 'Programming via python']"
print(uzumaxy.books) # Out: "['Programming via .NET', 'Programming via python']", but i'm expecting: "['Programming via .NET']"
似乎,属性“name”是实例级别的,但为什么属性“books”是类级别的? 如何使用实例级属性动态创建类型定义?谢谢帮忙。
【问题讨论】:
-
@MartijnPieters,问题是一样的,但我使用元编程,所以这些是不同的问题。
-
不,问题完全一样。
-
如何生成类并不重要;解决办法还是一样的;如果您需要实例属性,请不要使用可变类属性。