构造函数默认列表值

2024-05-14 22:21:56 发布

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

我不确定用默认值初始化列表的正确方式是什么。 我说的是变量自我保护特权. 这是正确的方法吗? 谢谢

class Privileges():
    """privileges class"""
    def __init__(self):
        self.privileges = ["can add post" , "can delete post" , "can ban user"]

    def show_privileges(self):
        print(self.privileges)

Tags: 方法selfadd列表initdef方式delete
1条回答
网友
1楼 · 发布于 2024-05-14 22:21:56

为类定义默认值的两个位置通常是作为类属性,或者在__init__方法中作为实例属性。你知道吗

如果类的所有实例共享相同的默认值,则可以将其设为类属性

class Privileges():

    privileges = ["can add post" , "can delete post" , "can ban user"]

    def show_privileges(self):
        print(self.privileges)

如果每个实例的属性不同,您可以将其作为一个实例属性

class Privileges():

    def __init__(self):
        self.privileges = ["can add post" , "can delete post" , "can ban user"]

请注意,使用类属性并不妨碍您在某个点添加具有相同名称的实例属性,这将覆盖默认的类属性。你知道吗

class Privileges():

    privileges = ['can add post']

    def show_privileges(self):
        print(self.privileges)

    def set_better_privileges(self):
        self.privileges = ["can add post" , "can delete post" , "can ban user"]

你知道吗

>>> p = Privileges()
>>> p.show_privileges()
['can add post']
>>> p.set_better_privileges()
>>> p.show_privileges()
["can add post" , "can delete post" , "can ban user"]
>>> p2 = Privileges()
>>> p2.show_privileges()
['can add post']

将类属性用作默认值的一个优点是,它允许您读取默认值而不必首先实例化类,并且还允许您更改该类的all实例的默认值。请注意这个行为,因为根据类实例如何使用和修改这些变量,您可能会无意中修改该类的所有实例之间共享的默认值,而不仅仅是针对该实例。你知道吗

相关问题 更多 >

    热门问题