Python 如果有的话,有什么图案可以去掉吗?

Python 如果有的话,有什么图案可以去掉吗?,python,design-patterns,Python,Design Patterns,您好,是否有任何方法通过删除view.py中的if-elif-elif代码来改进此代码?您可以使用以下方法: # status.py class Status(object): @classmethod def add(cls, title, kind, attachment): self.db.set('title', title) self.db.set('kind', kind) self.db.set('attachme

您好,是否有任何方法通过删除
view.py
中的
if-elif-elif
代码来改进此代码?

您可以使用以下方法:

# status.py

class Status(object):

    @classmethod
    def add(cls, title, kind, attachment):
        self.db.set('title', title)
        self.db.set('kind', kind)
        self.db.set('attachment', attachment)


def add_text_status(title, text):
    Status.add(title, 'text', {
        'text': text
    })

def add_photo_status(title, photos):
    Status.add(title, 'photos', {
        'photos': photos
    })

def add_video_status(title, video_url):
    Status.add(title, 'video', {
        'url': video_url  
    })

...

# view.py

@app.route('/add')
def add_status(request):
    title = request.get('title')
    kind = request.get('kind')
    if kind == 'text':
        text = request.get('text')
        status = add_text_status(title, kind, text)
    elif kind == 'photos':
        photo_ids = request.get('photo_ids')
        photos = Photo.gets(photo_ids)
        status = add_photo_status(title, kind, photos)
    elif kind == 'video':
        video_url = request.get('video_url')
        status = add_video_status(title, kind, video_url)
    elif ....

    return status.to_json()

或者将
进程*\u状态
功能合并到
添加*\u状态

中,您可以使用方法分派:

# status.py

class Status(object):

    @classmethod
    def add(cls, title, kind, attachment):
        self.db.set('title', title)
        self.db.set('kind', kind)
        self.db.set('attachment', attachment)


def add_text_status(title, text):
    Status.add(title, 'text', {
        'text': text
    })

def add_photo_status(title, photos):
    Status.add(title, 'photos', {
        'photos': photos
    })

def add_video_status(title, video_url):
    Status.add(title, 'video', {
        'url': video_url  
    })

...

# view.py

@app.route('/add')
def add_status(request):
    title = request.get('title')
    kind = request.get('kind')
    if kind == 'text':
        text = request.get('text')
        status = add_text_status(title, kind, text)
    elif kind == 'photos':
        photo_ids = request.get('photo_ids')
        photos = Photo.gets(photo_ids)
        status = add_photo_status(title, kind, photos)
    elif kind == 'video':
        video_url = request.get('video_url')
        status = add_video_status(title, kind, video_url)
    elif ....

    return status.to_json()

或者将
进程*.\u状态
功能合并到
添加*.\u状态

中,但不能不看到其余的。@IgnacioVazquez Abrams我添加了另一个,使其成为三个,不能不看到其余的。@IgnacioVazquez Abrams我添加了另一个,使其成为三个。@IgnacioVazquez Abrams