gpt4 book ai didi

Python 奇怪的类变量用法

转载 作者:行者123 更新时间:2023-11-28 20:50:53 25 4
gpt4 key购买 nike

假设我们有以下代码:

class A:
var = 0
a = A()

确实明白a.varA.var 是不同的变量,我想我明白为什么会这样。我认为这只是 python 数据模型的副作用,因为为什么有人要修改实例中的类变量?

但是,今天我遇到了一个关于这种用法的奇怪例子:它在 google app engine db.Model reference 中. Google 应用引擎数据存储假定我们继承了 db.Model 类并将键作为类变量引入:

class Story(db.Model):
title = db.StringProperty()
body = db.TextProperty()
created = db.DateTimeProperty(auto_now_add=True)
s = Story(title="The Three Little Pigs")

我不明白为什么他们希望我那样做?为什么不引入构造函数并仅使用实例变量?

最佳答案

db.Model 类是经典 Model View Controller 设计模式中的“模型”样式类。其中的每个作业实际上都是在数据库中设置列,同时还为您提供了一个易于使用的界面来进行编程。这就是为什么

title="The Three Little Pigs"

将更新对象以及数据库中的列。

有一个构造函数(毫无疑问在 db.Model 中)处理这个传递逻辑,它将获取一个关键字参数列表并消化它以创建这个关系模型。

这就是变量按原样设置的原因,以便保持这种关系。

编辑:让我更好地描述一下。一个普通的类只是为一个对象设置蓝图。它有实例变量和类变量。由于继承了 db.Model,这实际上是在做第三件事:在数据库中设置列定义。为了完成这第三项任务,它正在幕后对诸如属性设置和获取之类的事情进行大量更改。几乎一旦你从 db.Model 继承,你就不再是一个类,而是一个数据库模板。长话短说,这是使用类的一个非常具体的边缘案例

关于Python 奇怪的类变量用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11422686/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com