簡體   English   中英

創建具有可選列表類型屬性的 object 實例

[英]Creating an instance of an object with an optional list type attribute

我有一個具有可選屬性(別名)的 class(貓)。 如果在創建實例時未提供 alias 屬性,則它是一個空列表。 這很好用,我可以為別名創建 Cat object 和 append 字符串的實例。 如果我創建 Cat object 的一個實例並且只為屬性別名提供一個值,那么當我嘗試對其進行 append 時,我會收到錯誤AttributeError: 'str' object has no attribute 'append'

我嘗試了幾種方法來讓def __init__ append 成為單個值,但這些方法似乎都不起作用。

我可以創建 object 實例,然后創建 append 屬性的單個值,但我覺得我不明白我在做什么,所以我想探索它應該如何工作。

class Cat(): 
    """A simple attempt to model a cat."""
    def __init__(self, name, alias=[], age=None):
        """Initialize name and age attributes."""
        self.name = name
        self.age = age
        self.alias = alias

# testing default value -- my_cat    
my_cat = Cat('Nat')

# appending to the alias
my_cat.alias.append('Monster')

print (my_cat.name, " ", my_cat.alias)

# prints: Nat   ['Monster']

#testing with inital value -- alley_cat
alley_cat = Cat('Smelly Cat', 'smelly', 6)

##& we've set a value to alias at object creation, see if that forces alias to a string rather than a list.
alley_cat.alias.append('Stinker')

# throws error: 
    # alley_cat.alias.append('Stinker')
# AttributeError: 'str' object has no attribute 'append'

print (alley_cat.Name, " ", alley_cat.alias)

這是一個可以將alias arg 作為字符串並在實例化時將其放入列表的版本。 append_alias方法允許您將值添加到alias列表。 您還可以以帶有逗號分隔值的單個字符串的形式提供多個別名:

class Cat():

    def __init__(self, name, alias=None, age=None):
        self.name = name
        self.age = age

        if alias is None:
            self.alias = []
        else:
            self.alias = [a.lstrip().rstrip() for a in alias.split(',')]

    def append_alias(self, add_alias):

        [self.alias.append(a.lstrip().rstrip())
         for a in add_alias.split(',')]

my_cat = Cat('cats_name', 'alias1')

my_cat.alias
Output:
['alias1']

my_cat.append_alias('alias2, alias3')

my_cat.alias
Output:
['alias1', 'alias2', 'alias3']

my_cat.name
Output:
'cats_name'

您可以檢查__init__ function 中的別名參數的類型,如果不是,則將其包裝在一個列表中:

if not isinstance(alias, list):
    self.alias = [alias]
else:
    self.alias = alias

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM