定义类默认值的两个地方一般是作为类属性,或者在__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']
使用类属性作为默认值的一个优点是它允许您读取默认值而不必先实例化该类,并且它还允许您更改该类的 所有 个实例的默认值.请注意这种行为,因为根据您的类实例如何使用和修改这些变量,您可能会无意中修改该类的 所有 实例之间共享的默认值,而不是只是为了那个例子。