简体   繁体   English

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

[英]Appending to a instance (for a class list attribute)

What's the most Pythonic way to write the below append statement: 编写以下append语句的最Pythonic方法是什么:

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']

Thanks for the help. 谢谢您的帮助。

When the class is initialised, it sets my_list = None . 初始化类后,它将设置my_list = None It would be better to set my_list = [] , so that the caller can simply append to the list without worrying if it exists or not. 最好设置my_list = [] ,以便调用者可以简单地追加到列表,而不必担心列表是否存在。 This is far more pythonic than what you currently have. 这比您当前拥有的Python语言要好得多。



PS PS

A suggestion for future code to make it more "Pythonic" is to replace if my_class_instance.my_list with if my_class_instance.my_list is not None like so: 对于将来的代码,建议使其更具“ Pythonic”性,即if my_class_instance.my_list替换为if my_class_instance.my_list is not Noneif 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"] 

If i get it write, you don't want to set my_list attribute at initialization but only at the first append use ? 如果我写了它,您不想在初始化时设置my_list属性,而只在第一次追加时使用?

A way to do it is to build a custom append method that do the job and are transparent for user : 一种方法是构建一个自定义的append方法,该方法可以完成工作并对用户透明:

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

But there is few cases where you do not want to initiate my_list to an empty list at instance creation. 但是在少数情况下,您不想在实例创建时将my_list初始化为空列表。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM