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

2024-04-23 07:41:05 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

问题:(1)在给出的示例中,Person真的是从实例(db)继承的还是发生了其他事情?(2)如何将Person(和其他类)放在自己的文件中并共享db实例?你知道吗

注意:我运行的是python3.4。你知道吗

[编辑]

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

Tags: 文件对象实例实体数据库dborm指南
1条回答
网友
1楼 · 发布于 2024-04-23 07:41:05
  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中,只需导入:

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

相关问题 更多 >