具有互斥参数的方法

2024-04-29 11:42:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个可以用互斥参数实例化的类。 例如,我们的课程要么获取完整的URL,要么逐段创建:

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

但如果我们提供完整的“url”,则不需要“协议”、“主机名”、“uri”、“端口” 它可以通过可选参数完成,然后检查哪些参数不是空的,但实际上是蹩脚的:

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

我也不认为它是

def url(*args)

因为我们必须创建一个解析器来查看传递的是什么

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


Tags: 实例端口noneurl协议参数portdef
1条回答
网友
1楼 · 发布于 2024-04-29 11:42:33

在类中执行此操作的一种方法是使用类方法从不同的参数集构造对象

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")

使用这种模式,函数的目的总是明确的,传递的参数没有歧义,调用方也没有隐藏的排他性模式

相关问题 更多 >