如何处理这些类函数调用Pythonic方式?

时间:2012-10-25 22:33:43

标签: python python-2.7

我对Python比较陌生,我刚上课。我手上有点复杂,我想解决正确和Pythonic方式。

我想上课,比如说,书籍'。 我希望这个类能够处理两个具有不同结构的python词典,例如,化学'和' (英语)词典'。 我希望能够对这两个具有不同结构的python词典执行操作,例如' 查找',' 添加&# 39;,' 删除',' 列表'等

由于这两种结构,化学'和' 字典'不同,' 添加',' 删除'和' 查找 '函数需要具有不同的代码结构。因此,当我在化学'中找到某些内容时,要执行的代码块与'查找'不同。在'字典'

我的问题:

  • 我应该如何构建这个类?

  • 我该如何拨打电话?

  • 最终,如果函数调用看起来像books.chemistry.find('keyword to find')books.dictionary.find('other keyword to find'),我会很开心。这可能吗?我怎么能这样得到它?

谢谢。

2 个答案:

答案 0 :(得分:1)

通常,您还希望在类之间共享一些方法,这样您就可以拥有包含常规属性的Book类,然后使用定义不同Chemistry的{​​{1}}和English类方法和继承find的属性或方法:

Book

<强>更新

我没看过你留言的最后一部分。也许这就是你想要的:

class Books(object):
    def __init__(self, dictionary):
        self.input = dictionary
    def commonMethod(self):
        print 'This is a shared method'

class Chemistry(Books):
    def find(self):
        print 'This is a particular method'

class English(Books):
    def find(self):
        print 'This is other particular method'

chemistryBook = Chemistry({'hello': 'goodbye'})
chemistryBook.find()
# This is a particular method

EnglishBook = English({'hello': 'goodbye'})
EnglishBook.find()
# This is other particular method

基本上,这会根据输入创建一个特定的类实例。在这种情况下,如果您作为参数传递的字典的长度大于&gt; 1它创建了Chemistry()的实例。否则,它会创建一个English()实例。之后,您可以使用find方法。

答案 1 :(得分:1)

#Here's what I would do.

class Page(object):
    def __init__(self, text):
        self.text = text

class Book(object):

    def __init__(self, pages):

        if type(pages) == Page:
            self.pages = [pages]
        elif type(pages) == list:
            self.pages = pages

    def find(self, term):

        for page in self.pages:
            if term in page.text:
                return True
        return False

class ChemistryBook(Book):

    def __init__(self, pages):

        super(ChemistryBook, self).__init__(pages)

    #def someChemistryBookSpecificMethod(self):
    pass

if __name__ == '__main__':

    page = Page("Antoine Lavoisierb")
    chemBook = ChemistryBook(page)
    print chemBook.find("Antoine")