附加到实例(针对类列表属性)

时间:2018-11-17 17:06:42

标签: python python-3.x

编写以下append语句的最Python方式是什么:

class MyClass():
    my_list = None

    def __init__(self):
        self.attr_a = 'whatever_a_is'
        # NOTE below is commented out here because it's
        # NOT needed by most instances:
        # self.my_list = []


my_class_instance= MyClass()
# Append 'a_certain_value' to list attribute if it exists
# else create it:
if my_class_instance.my_list:
    my_class_instance.my_list.append('a_certain_value')
else:
    my_class_instance.my_list = ['a_cetain_value']

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

初始化该类时,它会设置my_list = None。最好设置my_list = [],以便调用者可以简单地追加到列表中,而不必担心列表是否存在。这比您目前拥有的Python语言要强得多。



P.S.

建议将来的代码使其更像“ Pythonic”,就是将if my_class_instance.my_list替换为if my_class_instance.my_list is not None,如下所示:

if my_class_instance.my_list is not None:
    my_class_instance.my_list.append("a_certain_value")
else:
    my_class_instance.my_list = ["a_certain_value"]

答案 1 :(得分:0)

如果我写了它,您不想在初始化时设置my_list属性,而只在第一次追加时使用?

一种实现方法是构建一个自定义的添加方法,该方法可以完成工作并对用户透明:

class MyClass:

    def __init__(self):
        # do something here
        pass

    def custom_append(self, a_certain_value):
        if hasattr(self, 'my_list'):
            self.my_list.append(a_certain_value)
        else:
            self.my_list = [a_certain_value]


my_class_instance = MyClass()

my_class_instance.custom_append('a_certain_value')

但是在少数情况下,您不想在实例创建时将my_list初始化为空列表。