当 class 看起来是从一个实例继承时,如何将它放在自己的文件中?
How to place class in its own file when it appears to be inheriting from an instance?
背景:我正在使用这个指南; Pony Orm。它告诉我创建一个对象(db = Database()),然后创建一个继承自 db 的 class(class Person(db.Entity)....)。据我所知,Person 是从实例继承的——我什至不知道这是可能的。如果可能的话,我不知道如何将 Person class 放在另一个文件中,因为所有实体都需要相同的 db 对象,但我直到运行时才实例化 db 对象(但我在设计时创建它们)。我觉得我在这里缺少一些基本的东西。
db = Database()
class Person(db.Entity):
name = Required(str)
age = Required(int)
cars = Set('Car')
问题:(1st)在给出的例子中,Person 真的是从一个实例(db)继承的还是发生了其他事情? (2nd) 我如何将 Person(和其他 classes)放在自己的文件中并共享数据库实例?
注:我是运行Python3.4.
[编辑]
print(type(db.Entity)) # yields: <class 'pony.orm.core.EntityMeta'>
当然不可能从实例继承。 db
可能是 Database
的一个实例,但 db.Entity
(您从中继承)非常像 class。如果您看一下 source code,您会发现它是动态创建的 class:
self.Entity = type.__new__(EntityMeta, 'Entity', (Entity,), {})
如果直到运行时才实例化 db
变量,这很棘手。您必须选择:要么在程序启动时实例化 db
并像往常一样定义您的 Person
class,要么推迟 class 定义直到创建 db
实例.一般来说,在运行时创建 classes 从来都不是一个好主意,所以我建议立即实例化 db
。
不过,将其拆分为多个文件很容易。在文件 A.py 中实例化 db
:
db = Database()
而在 B.py 中,您只需导入 A:
from A import db
class Person(db.Entity):
背景:我正在使用这个指南; Pony Orm。它告诉我创建一个对象(db = Database()),然后创建一个继承自 db 的 class(class Person(db.Entity)....)。据我所知,Person 是从实例继承的——我什至不知道这是可能的。如果可能的话,我不知道如何将 Person class 放在另一个文件中,因为所有实体都需要相同的 db 对象,但我直到运行时才实例化 db 对象(但我在设计时创建它们)。我觉得我在这里缺少一些基本的东西。
db = Database()
class Person(db.Entity):
name = Required(str)
age = Required(int)
cars = Set('Car')
问题:(1st)在给出的例子中,Person 真的是从一个实例(db)继承的还是发生了其他事情? (2nd) 我如何将 Person(和其他 classes)放在自己的文件中并共享数据库实例?
注:我是运行Python3.4.
[编辑]
print(type(db.Entity)) # yields: <class 'pony.orm.core.EntityMeta'>
当然不可能从实例继承。
db
可能是Database
的一个实例,但db.Entity
(您从中继承)非常像 class。如果您看一下 source code,您会发现它是动态创建的 class:self.Entity = type.__new__(EntityMeta, 'Entity', (Entity,), {})
如果直到运行时才实例化
db
变量,这很棘手。您必须选择:要么在程序启动时实例化db
并像往常一样定义您的Person
class,要么推迟 class 定义直到创建db
实例.一般来说,在运行时创建 classes 从来都不是一个好主意,所以我建议立即实例化db
。不过,将其拆分为多个文件很容易。在文件 A.py 中实例化
db
:db = Database()
而在 B.py 中,您只需导入 A:
from A import db class Person(db.Entity):