1

背景:我正在使用本指南;小马奥姆。它告诉我创建一个对象(db = Database()),然后创建一个继承自 db 的类(类 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)继承还是发生了其他事情?(2)我如何将 Person (和其他类)放在它自己的文件中并共享 db 实例?

注意:我正在运行 Python 3.4。

[编辑]

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

1 回答 1

4
  1. 当然不可能从实例继承。db可能是 的一个实例Database,但是db.Entity(您从中继承)在很大程度上是一个类。如果您查看源代码,您会发现它是一个动态创建的类:

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

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

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

    db = Database()

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

    from A import db class Person(db.Entity):

于 2017-06-20T23:13:31.083 回答