我经常发现我有类实例,这些实例是其他类实例的后代,呈树状结构。例如,假设我正在使用Python制作CMS平台。我可能有一个领域(Realm),在其下面是一个博客(Blog),再在其下是一篇文章(Post)。每个构造函数都将其父对象作为第一个参数,以便知道它属于哪个对象。它可能看起来像这样:
class Realm(object):
def __init__(self, username, password)
class Blog(object):
def __init__(self, realm, name)
class Post(object);
def __init__(self, blog, title, body)
我通常会在父类中添加一个“create”方法,以便链接更加自动化。我的Realm类可能看起来像这样:
class Realm(object):
def __init__(self, username, password):
...
def createBlog(self, name):
return Blog(self, name)
这使得API用户不必导入每个模块,只需导入顶层模块。可能是这样的:
realm = Realm("admin", "FDS$#%")
blog = realm.createBlog("Kittens!")
post = blog.createPost("Cute kitten", "Some HTML blah blah")
问题在于这些创建方法是冗余的,我必须在两个地方都pydoc相同的参数。
我想知道是否有一种模式(可能使用元类)将一个类实例连接到父类实例。某种方式使我能够调用像这样的代码,并让博客知道它的父域是什么:
realm = Realm("admin", "FDS$#%")
blog = realm.Blog("Kittens!")