0

我对 Python 比较陌生,我刚刚开始上课。我手上有一些复杂的东西,我想以正确的 Pythonic 方式解决。

我想有一门课,比如说“”。我希望这个类能够处理两个具有不同结构的 python 字典,比如“化学”和“ (英语)字典”。我希望能够对这两个具有不同结构的 python 字典执行操作,例如“查找”、“添加”、“删除”、“列表”等。

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

我的问题:

  • 我应该如何组织这门课?

  • 我应该如何拨打电话?

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

谢谢你。

4

2 回答 2

1

通常你还想在你的类之间共享一些方法,这样你就可以拥有一个Book具有通用属性的类,然后一个ChemistryEnglish定义不同的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

更新

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

class Books(object):
    def __init__(self, dictionary):
        self.input = dictionary
        if len(dictionary) > 1:
            print 'More than 1'
            self.command = Chemistry(self.input)
        else:
            print 'Less or equal'
            self.command = English(self.input)

class Chemistry(object):
    def __init__(self, d):
        self.d = d
    def find(self):
        print "Now you can manipulate your dictionary in Chemistry", self.d

class English(object):
    def __init__(self, d):
        self.d = d
    def find(self):
        print "Now you can manipulate your dictionary in English", self.d


book = Books({'hello': 'goodbye'})
book.command.find()
# Less or equal
# Now you can manipulate your dictionary in English {'hello': 'goodbye'}

book2 = Books({'hello': 'goodbye', 'one': 1})
book2.command.find()
# More than 1
# Now you can manipulate your dictionary in Chemistry {'hello': 'goodbye', 'one': 1}

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

于 2012-10-25T22:50:08.557 回答
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")
于 2012-10-25T22:50:41.143 回答