我创建了一个测试主题来理解我的面向对象编程。
class Asset(object):
def __init__(self, project):
self.project = project
def do_something(self):
return self.project.x, self.project.y, True
class Project(object):
def __init__(self, x, y):
self.x = x
self.y = y
self.asset = Asset(self) # Is this correct?
def call_do_something(self):
return self.asset.do_something()
project_test = Project('foo', 'bar')
project_test.call_do_something()
我可以通过传递类Project
的实例来将类Asset
初始化为类Project
的属性,就像我在self.asset = Asset(self)
中所做的那样吗?如果是,它的术语是什么?如果没有,我该如何解决这个问题?
是的,你完全可以。此设计模式称为组合重于继承
组合重于继承(或复合重用原则) 面向对象编程是类应该遵循的原则 通过其组合实现多态行为和代码重用(通过 包含实现所需 功能),而不是从基类或父类继承
阅读更多
是的,这是正确的。
您还可以将Asset
作为构造函数的参数传递Project
如下所示:
class Asset(object):
def __init__(self, project=None):
self.project = project
class Project(object):
def __init__(self, x, y, asset):
self.x = x
self.y = y
self.asset = asset
self.asset.project = self
这样,您可以按如下方式初始化项目:
project = Project('foo', 'bar', Asset())
该关系由Project
构造函数自动完成。
这可以称为对象组合,你主要表达的是:一个项目"有一个"断言。在大多数语言中,"字段","属性"等用于表示引用对象(此处断言)。
对于设计模式组合而不是继承,它可能更复杂:组件和复合将具有相同的接口(派生自它),并且通常复合将具有组件列表。