具有互斥参数的方法

问题描述 投票:0回答:1

我正在尝试创建一个可以用互斥参数实例化的类。例如。我们的课程采用完整的URL或逐段创建它:

def url('protocol','hostname','uri','port', 'url')

但是如果我们提供完整的'url',则不需要'protocol','hostname','uri','port'可以用可选参数来完成,然后检查什么不为空,但这确实很la脚:

def url('protocol'= None,'hostname' = None,'uri'= None,'port' = None, 'url'= None)

我也不认为是

def url(*args)

因为我们将必须创建一个解析器来查看我们正在传递的内容。

如何创建具有互斥参数的方法?

python methods arguments parameter-passing
1个回答
0
投票

在类中做到这一点的一种方法是使用类方法从不同的参数集构造对象。

class Url:                                                                      
    def __init__(self, full_url):                                               
        self.url = full_url                                                     

    @classmethod                                                               
    def from_url(cls, full_url):                                                     
        return cls(full_url)                                                    

    @classmethod                                                               
    def from_parts(cls, protocol, hostname, uri, port):
        # Join the parameters and construct object                             
        full_url = f"{protocol}://{hostname}:{port}"                            
        return cls(full_url)

用法:

my_url = Url.from_url("http://google.com")                                  
my_url = Url.from_parts("https", "google.com", "", "8080")

使用此模式,该功能的目的总是很清楚,并且对于传递的参数也没有歧义,并且调用者没有隐藏任何排他性模式。

© www.soinside.com 2019 - 2024. All rights reserved.