首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python适配器模式

Python适配器模式
EN

Stack Overflow用户
提问于 2014-03-18 12:34:38
回答 1查看 1K关注 0票数 0

假设我有以下课程

代码语言:javascript
复制
class MultiplePeopleInBook(object):
    def __init__(self, names, ages, book_title):
        self._names = names
        self._ages = ages
        self._book_title = book_title

    @property
    def names(self):
        return self._names

    @property
    def ages(self):
        return ages

    @property
    def book_title(self):
        return book_title

现在我需要另一门课,比如说这个代表一本书,里面只有一个人。

代码语言:javascript
复制
class SinglePersonInBook(object):
    def __init__(self, multiple_person_object):
        self._person = multiple_person_object

    @property
    def name(self):
        return self._person.names[0]

    @property
    def age(self):
        return self._person.ages[0]

因此,我将创建一个MultiplePeopleInBook对象,如下所示:

代码语言:javascript
复制
mpib = MultiplePeopleInBook(['Bob', 'Foo'], [12,24],'foo book')

以及类似于以下内容的SinglePersonInBook:

代码语言:javascript
复制
spib = SinglePersonInBook(MultiplePeopleInBook(['Bar'], [122], 'bar book')

问题:我的设置正确吗?

我如何得到book_title的斯派布?我是否需要在SinglePersonInBook适配器中有这样的方法?如果是的话,那么让它成为适配器有什么意义呢?

我可以这样为SPIB编写我的init方法:

代码语言:javascript
复制
def __init__(self, name, age, book_title):
    self._person = MultiplePeopleInBook([name],[age],boo_title)

这样,我可以创建一个SPIB对象,如下所示:

代码语言:javascript
复制
spib = SinglePersonInBook('Bar', 122, 'bar book')

这在我看来要干净得多

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-18 12:46:56

我如何得到book_title的斯派布?我是否需要在SinglePersonInBook适配器中有这样的方法?如果是的话,那么让它成为适配器有什么意义呢?

不,你需要。在您的示例中,创建适配器是没有意义的。更好的解决方案是用两个实现(单实现和多实现)对书中的人进行抽象。最基本的问题是-你需要它做什么?

我可以这样为SPIB编写init方法吗: def __init__(自我、姓名、年龄、book_title):self._person =MultiplePeopleInBook(姓名、年龄、boo_title) 这样,我可以创建一个SPIB对象,如下所示: spib =SinglePersonInBook(“bar”,122,“bar book”) 这在我看来要干净得多

您可以,但是在这种情况下,简单的抽象更好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22479580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档