我想拼凑一些示例代码,我遇到了一点,这对我来说并不合适。如果不包括整个资料来源,我会尝试将我认为重要的部分作为目标,并希望我能完成所有工作。子类化字典,类变量
在这里,他声明了一个自定义的dict子类,我认为应该是类变量'customer'和'film'。 (如,从一个类中设置这些,应该在所有情况下对其进行更新,是吗?)
class Payment(dict):
customer = film = None
而且这里是他使用的付款...
columns = [item[0] for item in cursor.description]
payments = []
for row in cursor.fetchall():
payment = Payment(zip(columns, row)) #I believe this is where he loads dict items
payment.customer = customers[payment["customer_id"]] #This is where he assigns 'class variable'
payment.film = films[payment["film_id"]]
payments.append(payment)
在最后的名单,不应该所有的'支付'具有相同的值(这是另一个字典)吗?这是我的困惑所在。事实证明,这两个属性在整个董事会都有独特的价值。这是否与子类Dict有关?这些值是被复制而不是被引用的(所以在技术上它们是类变量,但是因为它们被复制,所以它们仍然是唯一的)。
就在我以为我明白了简单的OO机制,这将引发我...
我见过这种技术用于创建实例并不总是初始化所有实例属性的情况。在这种情况下,它可能是一种有用的方法,可以将实例属性的默认值赋给可能或可能不会在实例中初始化的实例属性。 '金字塔'使用这种风格相当多。 – Duncan 2013-03-12 11:10:28
NPE的答案有所帮助,但是这个更好地说明了属性查找。我认为我很困惑,因为通常来自实例的类变量访问通常是只读的。我只写过静态方法的类变量。 – user2097818 2013-03-12 14:24:28
如果我真的想在我的实例中显式地将'foo'作为类变量(如你的例子),我需要从我的实例方法中使用C.foo吗? (假设变量是一个整数) – user2097818 2013-03-12 14:28:04