OOP类设计建议.一个类实例化,可以使用另一个类继承自父类相同的吗?



目前的情况是,我有一系列的类,将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)

相关内容

  • 没有找到相关文章