我对Python比较陌生,我刚上课。我手上有点复杂,我想解决正确和Pythonic方式。
我想上课,比如说,书籍'。 我希望这个类能够处理两个具有不同结构的python词典,例如,化学'和' (英语)词典'。 我希望能够对这两个具有不同结构的python词典执行操作,例如' 查找',' 添加&# 39;,' 删除',' 列表'等
由于这两种结构,化学'和' 字典'不同,' 添加',' 删除'和' 查找 '函数需要具有不同的代码结构。因此,当我在化学'中找到某些内容时,要执行的代码块与'查找'不同。在'字典' 。
我的问题:
我应该如何构建这个类?
我该如何拨打电话?
最终,如果函数调用看起来像books.chemistry.find('keyword to find')
和books.dictionary.find('other keyword to find')
,我会很开心。这可能吗?我怎么能这样得到它?
谢谢。
答案 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")