对于类变量的命名方式是否有约定(与实例变量不同),或者没有真正的区别。例如:
import pymysql
class DB:
NUM_CONNECTIONS = 0
def __init__(self):
self.conn = None
self.cursor = None
def __repr__(self):
return 'Closed connection' if not self.conn else f'Open conection @ 0x{id(self):x}'
def connect(self):
if self.conn: return
self.conn = pymysql.connect(host='127.0.0.1',user='root')
self.cursor = self.conn.cursor()
DB.NUM_CONNECTIONS += 1
目前我通常把变量做成CLASS_VARIABLES
和instance_variables
。这有哪些常见模式?
最佳答案
让我们检查一下 pylint 对类变量名的看法。考虑以下代码示例:
# top-level constants for comparison
lowercase_var = 0
UPPERCASE_VAR = 1
CamelCaseVar = 2
def func():
# function local variables
lowercase_var2 = 0
UPPERCASE_VAR2 = 1
CamelCaseVar2 = 2
class ClassName:
# class variables
lowercase_var3 = 0
UPPERCASE_VAR3 = 1
CamelCaseVar3 = 2
pylint 的输出:
D:\tmp>pylint test.py
************* Module test
test.py:1:0: C0103: Constant name "lowercase_var" doesn't conform to UPPER_CASE naming style (invalid-name)
test.py:3:0: C0103: Constant name "CamelCaseVar" doesn't conform to UPPER_CASE naming style (invalid-name)
test.py:8:4: C0103: Variable name "UPPERCASE_VAR2" doesn't conform to snake_case naming style (invalid-name)
test.py:9:4: C0103: Variable name "CamelCaseVar2" doesn't conform to snake_case naming style (invalid-name)
test.py:7:4: W0612: Unused variable 'lowercase_var2' (unused-variable)
test.py:8:4: W0612: Unused variable 'UPPERCASE_VAR2' (unused-variable)
test.py:9:4: W0612: Unused variable 'CamelCaseVar2' (unused-variable)
test.py:12:0: R0903: Too few public methods (0/2) (too-few-public-methods)
------------------------------------------------------------------
Your code has been rated at 2.73/10 (previous run: 1.82/10, +0.91)
观察:
- 没有关于三个类变量名中任何一个的警告。这三个都完全有效。
- 大写名称通常用于顶级常量。可以对类变量使用大写命名约定,使它们看起来像一个常量值。如果您要修改
DB.NUM_CONNECTIONS += 1
之类的变量,最好选择另一种命名风格。 - snake_case 命名风格用于函数局部变量名和函数名,CamelCase 仅用于类名。 类变量是一个变量,它不是一个类(但属于一个类)。所以看起来还是选择snake_case比较好。
最后两个观察是自以为是的,你可以不同意并做出自己的选择。好消息:您可以从三个选项中选择一个。
关于python - 如何命名类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58384436/