优雅地分配未知长度的变量

mar*_*991 4 python

(对不起.标题很不清楚.我无法想出一个好的.)

假设我有一个这样的网址(它是root-relative):

"/forums/support/windows/help_i_deleted_sys32/6/"
Run Code Online (Sandbox Code Playgroud)

我试图将其拆分为这样的类结构:

class Forum_Spot:
    def __init__(self, url):
        parts = url.strip("/").split("/")
        #parts is now ["forums", "support", "windows", "help...", "6"]

        self.root = "forums"
        self.section = "support"
        self.subsection = "windows"
        self.thread = "help..."
        self.post = "6"
Run Code Online (Sandbox Code Playgroud)

但是说我不知道​​网址到底有多长(可能是"/ forums/support /","/ forums/support/windows /"等)(但我知道它不会更深比5级).任何人都可以想出一种优雅的方式来分配这些值,让任何未分配的部分None?(即"/ forums/support/windows /",线程和帖子属性为None)

我知道我可以这样做:

class Forum_Spot:
    def __init__(self, url):
        parts = url.strip("/").split("/")
        #parts is now ["forums", "support", "windows", "help...", "6"]

        if len(parts) > 0:
            self.root = parts[0]
        else:
            self.root = None
        if len(parts) > 1:
            self.section = parts[1]
        else:
            #etc
Run Code Online (Sandbox Code Playgroud)

但这显然是超级优雅和令人讨厌的劳动密集型.任何人都可以想到更优雅的解决方案,保持班级签名相同吗?(我可以转换__init__函数来获取关键字参数,默认为None,但我希望能够只传入url并让类自己解决它)

谢谢!

Ash*_*ary 7

使用序列解包:

>>> strs =  "/forums/support/"
>>> spl =strs.strip('/').split('/')
>>> a,b,c,d,e = spl + [None]*(5-len(spl))
>>> a,b,c,d,e
('forums', 'support', None, None, None)

>>> strs = "/forums/support/windows/"
>>> spl =strs.strip('/').split('/')
>>> a,b,c,d,e = spl + [None]*(5-len(spl))
>>> a,b,c,d,e
('forums', 'support', 'windows', None, None)

>>> strs = "/forums/support/windows/help_i_deleted_sys32/6/"
>>> spl =strs.strip('/').split('/')
>>> a,b,c,d,e = spl + [None]*(5-len(spl))
>>> a,b,c,d,e
('forums', 'support', 'windows', 'help_i_deleted_sys32', '6')
Run Code Online (Sandbox Code Playgroud)