gpt4 book ai didi

python - 当它似乎是从一个实例继承时,如何将类放在它自己的文件中?

转载 作者:太空宇宙 更新时间:2023-11-04 09:58:54 25 4
gpt4 key购买 nike

背景:我正在使用这个指南; Pony Orm .它告诉我创建一个对象 (db = Database()),然后创建一个继承自 db 的类(class Person(db.Entity)....)。据我所知,Person 是从实例继承的——我什至不知道这是可能的。如果可能的话,我不知道如何将 Person 类放在另一个文件中,因为所有实体都需要相同的 db 对象,但我直到运行时才实例化 db 对象(但我在设计时创建它们时间)。我觉得我在这里缺少一些基本的东西。

db = Database()
class Person(db.Entity):
name = Required(str)
age = Required(int)
cars = Set('Car')

问题:(1st)在给定的示例中,Person 是否真的继承自一个实例(db)或者是否发生了其他事情? (2nd) 如何将 Person(和其他类)放入其自己的文件中并共享数据库实例?

注意:我运行的是 Python 3.4。

[编辑]

print(type(db.Entity)) # yields: <class 'pony.orm.core.EntityMeta'>

最佳答案

  1. 当然不可能从实例继承。 db 可能是 Database 的一个实例,但是 db.Entity(您从中继承)在很大程度上是一个类。如果你看一下 source code你可以看到它是一个动态创建的类:

    self.Entity = type.__new__(EntityMeta, 'Entity', (Entity,), {})

  2. 如果您直到运行时才实例化 db 变量,这很棘手。你必须选择:要么在程序启动时实例化 db 并像往常一样定义你的 Person 类,要么推迟类定义直到 db 实例是创建。一般来说,在运行时创建类从来都不是一个好主意,所以我建议立即实例化 db

    然而,将其拆分为多个文件很容易。在文件 A.py 中实例化 db:

    db = 数据库()

    在 B.py 中,您只需导入 A:

    从 A 导入数据库
    人类(db.Entity):

关于python - 当它似乎是从一个实例继承时,如何将类放在它自己的文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44664202/

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