当类看起来是从实例继承时,如何将类放在自己的文件中?

时间:2017-06-20 22:51:16

标签: python python-3.x inheritance pony ponyorm

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

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

问题 :(第一)在给出的示例中,Person是否真的从实例(db)继承或者是其他什么? (2)如何将Person(和其他类)放在自己的文件中并共享数据库实例?

注意:我正在运行Python 3.4。

[编辑]

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

1 个答案:

答案 0 :(得分:4)

  1. 当然,不可能从实例继承。 db可能是Database的一个实例,但db.Entity(您继承自的)是一个类。如果您查看source code,您可以看到它是一个动态创建的类:

    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):