目前的情况是,我有一系列的类,将API请求JSON转换为对象。这些对象是按照我的数据库模式建模的。我认为我正在努力的部分是如何在我的数据库中表示那些由外键形成的实体关系。
下面的类只是一个例子,实例变量与我的应用程序的模式有很大的不同。
class Table(ABC):
def __init__(self):
# stuff
@abstractmethod
def validateSchema(self):
"""Validates the resources column values."""
pass
class ClassRoom(Table):
def __init__(self, id, location_id, location):
super().__init__()
self.id = id
self.location = Location(location_id, location)
def validateSchema(self):
# stuff
class Location(Table):
def __init__(self, id, location):
super().__init__()
self.id = id
self.location = location
def validateSchema(self):
# stuff
我所关心的部分是,当我创建的对象与具有该对象作为实例变量的类的类型相同时。
class ClassRoom(Table):
def __init__(self, id, location_id, location):
# Can I instantiate this class even if it inherits the same parent?
self.location = Location(location_id, location)
在OOP中可以吗?有没有更好的方法来设计我的课程?
同样,这些类只是为发送到我的API的请求json定义的。它们的目的是促进列验证和其他一些目的。我希望在这些类中实现的特定验证来自与flask_Marshmallow的其他Stackoverflow post Flask sqlAlchemy验证问题。我不是要在这里重新创建SqlAlchemy。
您的Table
类类似于SqlAlchemy的db.Model
类。就像它可以在不同的子类之间有引用一样,你也可以。
您的Classroom.__init__()
方法的具体设计似乎是错误的。同一位置的所有教室都应该有对相同Location
对象的引用,但是您要为每个教室创建一个新对象。Location
应该是一个参数,而不是位置ID和名称。
class ClassRoom(Table):
def __init__(self, id, location):
super().__init__()
self.id = id
self.location = location
然后您可以在一个位置创建多个教室:
loc = Location(loc_id, loc_name)
c1 = Classroom(c1_id, loc)
c2 = Classroom(c2_id, loc)