Python面向对象基础示例_创建对象

                                 Python面向对象基础示例_创建对象

 

python是面向对象的语言,你可以很轻松的创建一个类和对象。本书代码源自<>,通过借助命令行界面构建可对笔记就行增、查、改的案例。本文旨在对代码的解读,详见代码处注释部分。

notebook.py

import datetime

# 保存下一个笔记对象的id
last_id = 0


class Note:
    '''该类是笔记本类,它可以按照指定的字符串检索和保存笔记内容'''

    def __init__(self, memo, tags=""):
        """初始化一个含有文本和可选标签的笔记,自动给笔记生成创建时间和id"""
        # 定义memo笔记内容、tags笔记标签、creation_date创建时间、id笔记编号
        self.memo = memo
        self.tags = tags
        self.creation_date = datetime.date.today()
        global last_id
        last_id += 1
        self.id = last_id

    def match(self, filter):
        """判断给定的字符串是否匹配上文本或者标记,是则True反正则反"""
        # 如果字符串在memo或者tags属性里则为True否则为False
        return filter in self.memo or filter in self.tags


class Notebook:
    """创建一批可以标记、修改、检索的笔记集合"""

    def __init__(self):
        """初始化个含有空的笔记列表的笔记本对象."""
        # 定义一个属性为notes的空的列表
        self.notes = []

    def new_note(self, memo, tags=""):
        """创建个笔记对象并放置到笔记列表中"""
        # 通过列表的append方法追加Note对象到notes属性内
        self.notes.append(Note(memo, tags))

    def _find_note(self, note_id):
        """通过指定的笔记id查找笔记"""
        # 遍历notes列表,通过有一个笔记的id与参数的相同则返回一个note对象,否则为None
        for note in self.notes:
            if str(note.id) == str(note_id):
                return note
        return None

    def modify_memo(self, note_id, memo):
        """通过指定的笔记id查找笔记并将其内容更改为输入的字符串."""
        #通过find_note方法找到笔记,如果存在该对象则将memo属性设置为传入的字符串并范围True,找不到则为False
        note = self._find_note(note_id)
        if note:
            note.memo = memo
            return True
        return False

    def modify_tags(self, note_id, tags):
        """F通过指定的笔记id查找笔记并将其标签更改为输入的字符串."""
        note = self._find_note(note_id)
        if note:
            note.tags = tags
            return True
        return False

    def search(self, filter):
        """找到所有匹配到文本和标记的笔记"""
        # 遍历notes列表如果通过输入字符串匹配文本内容和标签则返回该笔记对象,否则为None
        return [note for note in self.notes if note.match(filter)]
        '''for note in self.notes:
            if note.match(filter):
                return note
            else:
                return None
        '''

menu.py

import sys
import os
from notebook import Notebook

sys.path.append(os.getcwd())
class Menu:
    """显示菜单说明并执行用户指定的选项"""

    def __init__(self):
        self.notebook = Notebook()
        self.choices = {
            "1": self.show_notes,
            "2": self.search_notes,
            "3": self.add_note,
            "4": self.modify_note,
            "5": self.quit,
        }

    def display_menu(self):
        print(
            """
Notebook Menu

1. Show all Notes
2. Search Notes
3. Add Note
4. Modify Note
5. Quit
"""
        )

    def run(self):
        """根据用户的选择执行对应的动作."""
        while True:
            self.display_menu()
            choice = input("Enter an option: ")
            #通过choices字段映射到相应的操作
            action = self.choices.get(choice)
            #print(action.__name__)
            if action:
                action()
            else:
                print("{0} is not a valid choice".format(choice))

    def show_notes(self, notes=None):
        if not notes:
            notes = self.notebook.notes
        for note in notes:
            print("{0}: {1}\n{2}".format(note.id, note.tags, note.memo))

    def search_notes(self):
        filter = input("Search for: ")
        notes = self.notebook.search(filter)
        self.show_notes(notes)

    def add_note(self):
        memo = input("Enter a memo: ")
        tag = input("Enter a tag: ")
        self.notebook.new_note(memo,tag)
        print("Your note has been added.")

    def modify_note(self):
        id = input("Enter a note id: ")
        memo = input("Enter a memo: ")
        tags = input("Enter tags: ")
        if memo:
            self.notebook.modify_memo(id, memo)
        if tags:
            self.notebook.modify_tags(id, tags)

    def quit(self):
        print("Thank you for using your notebook today.")
        sys.exit(0)


if __name__ == "__main__":
    Menu().run()
# python命令里显示代码处的函数注释
E:\noteprac>python -i notebook.py
>>> help(Note)

 查看代码注释效果:

Help on class Note in module __main__:

class Note(builtins.object)
 |  Note(memo, tags='')
 |
 |  该类是笔记本类,它可以按照指定的字符串检索和保存笔记内容
 |
 |  Methods defined here:
 |
 |  __init__(self, memo, tags='')
 |      初始化一个含有文本和可选标签的笔记,自动给笔记生成创建
时间和id
 |
 |  match(self, filter)
 |      判断给定的字符串是否匹配上文本或者标记,是则True反正则
反
 |
 |  -----------------------------------------------------
------------
 |  Data descriptors defined here:
 |
 |  __dict__
 |      dictionary for instance variables (if defined)
 |
 |  __weakref__
 |      list of weak references to the object (if defined

 

你可能感兴趣的:(Python案例)