what is a good use case for class attributes
案例0。类方法只是类属性。这不仅仅是一个技术上的相似性——您可以在运行时通过为类方法分配可调用项来访问和修改它们。
案例1。一个模块可以很容易地定义几个类。把关于class A的所有内容封装到A...中,把关于class B的所有内容封装到B...中是合理的。例如# module xxx
class X:
MAX_THREADS = 100
...
# main program
from xxx import X
if nthreads < X.MAX_THREADS: ...
案例2。这个类有很多默认属性,可以在实例中修改。在这里,将属性保留为“全局默认值”是一个特性,而不是bug。class NiceDiff:
"""Formats time difference given in seconds into a form '15 minutes ago'."""
magic = .249
pattern = 'in {0}', 'right now', '{0} ago'
divisions = 1
# there are more default attributes
一个创建NiceDiff实例以使用现有的或稍加修改的格式,但一个指向不同语言的本地化程序将该类子类化,以一种根本不同的方式实现某些函数和重新定义常量:class Разница(NiceDiff): # NiceDiff localized to Russian
'''Из разницы во времени, типа -300, делает конкретно '5 минут назад'.'''
pattern = 'через {0}', 'прям щас', '{0} назад'
您的案例:常量——是的,我把它们放到了课堂上。说self.CONSTANT = ...很奇怪,所以我看不出击倒他们的大风险。
默认属性——mixed,如上所述,可以转到类,但也可以转到__init__,具体取决于语义。
全局数据结构---如果类仅使用则转到类,但也可以转到模块,在任何情况下都必须非常有文档记录。