你想了解给类变量和实例变量命名时需要避开的核心坑点,这些坑不仅会违反 PEP 8 规范,还可能导致语法错误、逻辑混乱或代码维护困难。下面按「通用避坑点(两类变量都要注意)」「类变量专属避坑点」「实例变量专属避坑点」分类,结合错误示例和正确示范,讲透所有关键避坑点。
一、通用避坑点(类变量 / 实例变量均需避开)
这类坑是所有变量命名的 "红线",违反会直接导致语法错误或可读性灾难。
避坑 1:违反 PEP 8 基础命名风格
错误行为:
- 用驼峰 / 大驼峰命名(如
totalUsers/TotalUsers); - 数字开头、含特殊字符(
-/@/#); - 无意义缩写(如
tu代替total_users); - 使用 Python 关键字(
class/def/if等)。
错误示例:
python
运行
class BadDemo:
totalUsers = 0 # 驼峰命名(违反蛇形规则)
123count = 10 # 数字开头(语法错误)
user-count = "13800138000" # 含连字符(语法错误)
class = "高一(1)班" # 使用关键字(语法错误)
tu = 0 # 无意义缩写(可读性差)
def __init__(self):
self.UserName = "小明" # 大驼峰(违反蛇形规则)
正确示例:
python
运行
class GoodDemo:
total_users = 0 # 蛇形命名
count_123 = 10 # 数字放后面(合法)
phone_number = "13800138000" # 下划线替代连字符
class_name = "高一(1)班" # 避开关键字,语义清晰
total_users = 0 # 完整命名,见名知意
def __init__(self):
self.user_name = "小明" # 蛇形命名
避坑 2:滥用魔法属性格式(__xxx__)
错误行为 :将普通变量命名为__xxx__格式(如__total__),这是 Python 保留的「魔法属性 / 方法」格式(如__init__/__str__),普通变量使用会造成混淆。
错误示例:
python
运行
class BadDemo:
__total_orders__ = 0 # 滥用魔法格式
def __init__(self):
self.__user_id__ = 1001 # 滥用魔法格式
正确示例:
python
运行
class GoodDemo:
total_orders = 0 # 普通蛇形命名
def __init__(self):
self.user_id = 1001 # 普通蛇形命名
避坑 3:类变量与实例变量同名(高频致命坑)
错误行为:类变量和实例变量用相同名称,导致实例访问时优先读取实例变量,类变量被 "隐藏",逻辑完全混乱。
错误示例:
python
运行
class BadDemo:
name = "默认名称" # 类变量
def __init__(self, name):
self.name = name # 实例变量与类变量同名
# 调用时逻辑混乱
obj = BadDemo("小明")
print(obj.name) # 输出"小明"(实例变量),类变量被隐藏
print(BadDemo.name) # 输出"默认名称"(类变量),新手易误解
正确示例:
python
运行
class GoodDemo:
default_name = "默认名称" # 类变量改名,避免冲突
def __init__(self, name):
self.name = name # 实例变量
# 逻辑清晰
obj = GoodDemo("小明")
print(obj.name) # 输出"小明"(实例变量)
print(GoodDemo.default_name) # 输出"默认名称"(类变量)
二、类变量专属避坑点
避坑 1:常量类变量未用全大写标识
错误行为:类级常量(不可修改的固定值)用全小写 / 驼峰命名,无法区分 "普通共享变量" 和 "常量",可读性差。
错误示例:
python
运行
class BadDemo:
max_retry = 3 # 常量未用全大写
default_port = 8080 # 常量未用全大写
正确示例:
python
运行
class GoodDemo:
MAX_RETRY = 3 # 常量全大写+下划线
DEFAULT_PORT = 8080 # 常量全大写+下划线
避坑 2:滥用双下划线命名类变量
错误行为 :给普通私有类变量加双下划线(如__internal_cache),触发 Python 的「名称改写」(变成_类名__internal_cache),增加代码复杂度和调试难度(非极端场景完全没必要)。
错误示例:
python
运行
class BadDemo:
__internal_cache = {} # 双下划线,触发名称改写
def get_cache(self):
return self.__internal_cache # 看似简单,实际是_ BadDemo__internal_cache
正确示例:
python
运行
class GoodDemo:
_internal_cache = {} # 单下划线,约定私有(足够用)
def get_cache(self):
return self._internal_cache # 直接访问,逻辑清晰
避坑 3:将实例专属属性定义为类变量
错误行为:把本该属于单个实例的属性(如用户姓名、订单 ID)定义为类变量,导致所有实例共享该值,逻辑错误。
错误示例:
python
运行
class BadUser:
user_id = 0 # 错误:user_id是实例独有,却定义为类变量
def __init__(self, id):
BadUser.user_id = id # 所有实例共享同一个user_id
u1 = BadUser(1001)
u2 = BadUser(1002)
print(u1.user_id) # 输出1002(被u2覆盖,逻辑错误)
正确示例:
python
运行
class GoodUser:
def __init__(self, id):
self.user_id = id # 实例变量,每个实例独有
u1 = GoodUser(1001)
u2 = GoodUser(1002)
print(u1.user_id) # 输出1001(正确)
print(u2.user_id) # 输出1002(正确)
避坑 4:可变类型类变量命名语义模糊
错误行为 :列表 / 字典等可变类变量用无意义名称(如data/list),无法体现 "共享集合 / 映射" 的特性,增加理解成本。
错误示例:
python
运行
class BadCart:
list = [] # 命名模糊,且与内置list重名
data = {} # 命名模糊
正确示例:
python
运行
class GoodCart:
default_items = [] # 语义清晰:默认商品列表
order_status_mapping = {} # 语义清晰:订单状态映射
三、实例变量专属避坑点
避坑 1:滥用双下划线(强私有)
错误行为 :普通私有实例变量用双下划线(如__password),仅需 "约定私有" 的场景却用 "强私有",导致子类无法扩展、调试困难(双下划线仅在 "防止子类意外覆盖" 时使用)。
错误示例:
python
运行
class BadUser:
def __init__(self):
self.__password = "123456" # 普通私有却用双下划线
class ChildUser(BadUser):
def __init__(self):
super().__init__()
self.__password = "654321" # 实际创建的是_ChildUser__password,未覆盖父类
正确示例:
python
运行
class GoodUser:
def __init__(self):
self._password = "123456" # 单下划线,约定私有(足够用)
class ChildUser(GoodUser):
def __init__(self):
super().__init__()
self._password = "654321" # 正常覆盖,逻辑清晰
避坑 2:私有实例变量未加单下划线标识
错误行为:本该私有(外部不建议访问)的实例变量(如密码、令牌)不加单下划线,导致外部误修改,违反 "最小暴露原则"。
错误示例:
python
运行
class BadUser:
def __init__(self):
self.password_hash = "e10adc3949ba59abbe56e057f20f883e" # 私有属性却无标识
# 外部误修改
obj = BadUser()
obj.password_hash = "hack" # 直接修改私有属性,风险高
正确示例:
python
运行
class GoodUser:
def __init__(self):
self._password_hash = "e10adc3949ba59abbe56e057f20f883e" # 单下划线标识私有
# 外部看到下划线,知道不建议修改(约定)
obj = GoodUser()
# obj._password_hash = "hack" # 开发者会意识到这是私有属性,谨慎操作
避坑 3:与内置属性 / 方法同名
错误行为 :实例变量名与 Python 内置类型 / 方法同名(如self.list/self.dict/self.len),覆盖内置属性,导致后续调用出错。
错误示例:
python
运行
class BadDemo:
def __init__(self):
self.list = [1,2,3] # 覆盖内置list
self.dict = {"a":1} # 覆盖内置dict
def print_list(self):
print(list(self.list)) # 本意是转列表,却调用了实例变量list,报错
正确示例:
python
运行
class GoodDemo:
def __init__(self):
self.item_list = [1,2,3] # 改名,避免冲突
self.data_dict = {"a":1} # 改名,避免冲突
def print_list(self):
print(list(self.item_list)) # 正常调用内置list,无冲突
避坑 4:无意义单字母命名
错误行为 :非通用场景(如坐标x/y、循环索引i)使用单字母命名(如self.x/self.y表示用户 ID / 姓名),可读性极差。
错误示例:
python
运行
class BadUser:
def __init__(self, id, name):
self.x = id # x无意义,不知道是用户ID
self.y = name # y无意义,不知道是用户名
正确示例:
python
运行
class GoodUser:
def __init__(self, id, name):
self.user_id = id # 语义清晰
self.user_name = name # 语义清晰
总结:命名规范核心避坑原则
- 基础底线 :严格遵循蛇形命名(
snake_case),避开关键字、魔法格式、数字开头和特殊字符; - 核心原则:类变量 / 实例变量绝不重名,常量类变量必须全大写,私有变量优先用单下划线;
- 极简原则:双下划线仅用于 "防止子类覆盖",其余场景用单下划线约定私有即可;
- 语义原则:命名必须见名知意,避免无意义缩写 / 单字母,可变类型变量要体现 "集合 / 映射" 特性。
避开这些坑,不仅能让代码符合规范,更能从根本上减少逻辑错误和维护成本。
book.gzyacf.cn/article/B2c3D4e5F6.html
book.gzyacf.cn/article/C3d4E5f6G7.html
book.gzyacf.cn/article/D4e5F6g7H8.html
book.gzyacf.cn/article/E5f6G7h8I9.html
book.gzyacf.cn/article/F6g7H8i9J0.html
book.gzyacf.cn/article/G7h8I9j0K1.html
book.gzyacf.cn/article/H8i9J0k1L2.html
book.gzyacf.cn/article/I9j0K1l2M3.html
book.gzyacf.cn/article/J0k1L2m3N4.html
book.gzyacf.cn/article/K1l2M3n4O5.html
book.gzyacf.cn/article/L2m3N4o5P6.html
book.gzyacf.cn/article/M3n4O5p6Q7.html
book.gzyacf.cn/article/N4o5P6q7R8.html
book.gzyacf.cn/article/O5p6Q7r8S9.html
book.gzyacf.cn/article/P6q7R8s9T0.html
book.gzyacf.cn/blog/Q7r8S9t0U1.html
book.gzyacf.cn/blog/R8s9T0u1V2.html
book.gzyacf.cn/blog/S9t0U1v2W3.html
book.gzyacf.cn/blog/T0u1V2w3X4.html
book.gzyacf.cn/blog/U1v2W3x4Y5.html
book.gzyacf.cn/blog/V2w3X4y5Z6.html
book.gzyacf.cn/blog/W3x4Y5z6A7.html
book.gzyacf.cn/blog/X4y5Z6a7B8.html
book.gzyacf.cn/blog/Y5z6A7b8C9.html
book.gzyacf.cn/blog/Z6a7B8c9D0.html
book.gzyacf.cn/article/a7B8c9D0e1.html
book.gzyacf.cn/article/b8C9d0E1f2.html
book.gzyacf.cn/article/c9D0e1F2g3.html
book.gzyacf.cn/article/d0E1f2G3h4.html
book.gzyacf.cn/article/e1F2g3H4i5.html
book.gzyacf.cn/article/f2G3h4I5j6.html
book.gzyacf.cn/article/g3H4i5J6k7.html
book.gzyacf.cn/article/h4I5j6K7l8.html
book.gzyacf.cn/article/i5J6k7L8m9.html
book.gzyacf.cn/article/j6K7l8M9n0.html
book.gzyacf.cn/article/k7L8m9N0o1.html
book.gzyacf.cn/article/l8M9n0O1p2.html
book.gzyacf.cn/article/m9N0o1P2q3.html
book.gzyacf.cn/article/n0O1p2Q3r4.html
book.gzyacf.cn/article/o1P2q3R4s5.html
book.gzyacf.cn/article/p2Q3r4S5t6.html
book.gzyacf.cn/article/q3R4s5T6u7.html
book.gzyacf.cn/article/r4S5t6U7v8.html
book.gzyacf.cn/article/s5T6u7V8w9.html
book.gzyacf.cn/article/t6U7v8W9x0.html
book.gzyacf.cn/article/u7V8w9X0y1.html
book.gzyacf.cn/article/v8W9x0Y1z2.html
book.gzyacf.cn/article/w9X0y1Z2a3.html
book.gzyacf.cn/article/x0Y1z2A3b4.html
bbs.gzyacf.cn/article/A1b2C3d4E5.html
bbs.gzyacf.cn/article/B2c3D4e5F6.html
bbs.gzyacf.cn/article/C3d4E5f6G7.html
bbs.gzyacf.cn/article/D4e5F6g7H8.html
bbs.gzyacf.cn/article/E5f6G7h8I9.html
bbs.gzyacf.cn/article/F6g7H8i9J0.html
bbs.gzyacf.cn/article/G7h8I9j0K1.html
bbs.gzyacf.cn/article/H8i9J0k1L2.html
bbs.gzyacf.cn/article/I9j0K1l2M3.html
bbs.gzyacf.cn/article/J0k1L2m3N4.html
bbs.gzyacf.cn/article/K1l2M3n4O5.html
bbs.gzyacf.cn/article/L2m3N4o5P6.html
bbs.gzyacf.cn/article/M3n4O5p6Q7.html
bbs.gzyacf.cn/article/N4o5P6q7R8.html
bbs.gzyacf.cn/article/O5p6Q7r8S9.html
bbs.gzyacf.cn/article/P6q7R8s9T0.html
bbs.gzyacf.cn/blog/Q7r8S9t0U1.html
bbs.gzyacf.cn/blog/R8s9T0u1V2.html
bbs.gzyacf.cn/blog/S9t0U1v2W3.html
bbs.gzyacf.cn/blog/T0u1V2w3X4.html
bbs.gzyacf.cn/blog/U1v2W3x4Y5.html
bbs.gzyacf.cn/blog/V2w3X4y5Z6.html
bbs.gzyacf.cn/blog/W3x4Y5z6A7.html
bbs.gzyacf.cn/blog/X4y5Z6a7B8.html
bbs.gzyacf.cn/blog/Y5z6A7b8C9.html
bbs.gzyacf.cn/blog/Z6a7B8c9D0.html
bbs.gzyacf.cn/article/a7B8c9D0e1.html
bbs.gzyacf.cn/article/b8C9d0E1f2.html
bbs.gzyacf.cn/article/c9D0e1F2g3.html
bbs.gzyacf.cn/article/d0E1f2G3h4.html
bbs.gzyacf.cn/article/e1F2g3H4i5.html
bbs.gzyacf.cn/article/f2G3h4I5j6.html
bbs.gzyacf.cn/article/g3H4i5J6k7.html
bbs.gzyacf.cn/article/h4I5j6K7l8.html
bbs.gzyacf.cn/article/i5J6k7L8m9.html
bbs.gzyacf.cn/article/j6K7l8M9n0.html
bbs.gzyacf.cn/article/k7L8m9N0o1.html
bbs.gzyacf.cn/article/l8M9n0O1p2.html
bbs.gzyacf.cn/article/m9N0o1P2q3.html
bbs.gzyacf.cn/article/n0O1p2Q3r4.html
bbs.gzyacf.cn/article/o1P2q3R4s5.html
bbs.gzyacf.cn/article/p2Q3r4S5t6.html
bbs.gzyacf.cn/article/q3R4s5T6u7.html
bbs.gzyacf.cn/article/r4S5t6U7v8.html
bbs.gzyacf.cn/article/s5T6u7V8w9.html
bbs.gzyacf.cn/article/t6U7v8W9x0.html
bbs.gzyacf.cn/article/u7V8w9X0y1.html
bbs.gzyacf.cn/article/v8W9x0Y1z2.html
bbs.gzyacf.cn/article/w9X0y1Z2a3.html
bbs.gzyacf.cn/article/x0Y1z2A3b4.html
mp.gzyacf.cn/article/A2b5C7d1E9.html
mp.gzyacf.cn/article/B3c6D8e2F0.html
mp.gzyacf.cn/article/C4d7E9f3G1.html
mp.gzyacf.cn/article/D5e8F0g4H2.html
mp.gzyacf.cn/article/E6f9G1h5I3.html
mp.gzyacf.cn/article/F7g0H2i6J4.html
mp.gzyacf.cn/article/G8h1I3j7K5.html
mp.gzyacf.cn/article/H9i2J4k8L6.html
mp.gzyacf.cn/article/I0j3K5l9M7.html
mp.gzyacf.cn/article/J1k4L6m0N8.html
mp.gzyacf.cn/article/K2l5M7n1O9.html
mp.gzyacf.cn/article/L3m6N8o2P0.html
mp.gzyacf.cn/article/M4n7O9p3Q1.html
mp.gzyacf.cn/article/N5o8P0q4R2.html
mp.gzyacf.cn/article/O6p9Q1r5S3.html
mp.gzyacf.cn/blog/P7q0R2s6T4.html
mp.gzyacf.cn/blog/Q8r1S3t7U5.html
mp.gzyacf.cn/blog/R9s2T4u8V6.html
mp.gzyacf.cn/blog/S0t3U5v9W7.html
mp.gzyacf.cn/blog/T1u4V6w0X8.html
mp.gzyacf.cn/blog/U2v5W7x1Y9.html
mp.gzyacf.cn/blog/V3w6X8y2Z0.html
mp.gzyacf.cn/blog/W4x7Y9z3A1.html
mp.gzyacf.cn/blog/X5y8Z0a4B2.html
mp.gzyacf.cn/blog/Y6z9A1b5C3.html
mp.gzyacf.cn/blog/Z7a0B2c6D4.html
mp.gzyacf.cn/article/a8b1C3d7E5.html
mp.gzyacf.cn/article/b9c2D4e8F6.html
mp.gzyacf.cn/article/c0d3E5f9G7.html
mp.gzyacf.cn/article/d1e4F6g0H8.html
mp.gzyacf.cn/article/e2f5G7h1I9.html
mp.gzyacf.cn/article/f3g6H8i2J0.html
mp.gzyacf.cn/article/g4h7I9j3K1.html
mp.gzyacf.cn/article/h5i8J0k4L2.html
mp.gzyacf.cn/article/i6j9K1l5M3.html
mp.gzyacf.cn/article/j7k0L2m6N4.html
mp.gzyacf.cn/article/k8l1M3n7O5.html
mp.gzyacf.cn/article/l9m2N4o8P6.html
mp.gzyacf.cn/article/m0n3O5p9Q7.html
mp.gzyacf.cn/article/n1o4P6q0R8.html
mp.gzyacf.cn/article/o2p5Q7r1S9.html
mp.gzyacf.cn/article/p3q6R8s2T0.html
mp.gzyacf.cn/article/q4r7S9t3U1.html
mp.gzyacf.cn/article/r5s8T0u4V2.html
mp.gzyacf.cn/article/s6t9U1v5W3.html
mp.gzyacf.cn/article/t7u0V2w6X4.html
mp.gzyacf.cn/article/u8v1W3x7Y5.html
mp.gzyacf.cn/article/v9w2X4y8Z6.html
mp.gzyacf.cn/article/w0x3Y5z9A7.html
mp.gzyacf.cn/article/x1y4Z6a0B8.html
m.gzyacf.cn/article/A3b6C8d2E0.html
m.gzyacf.cn/article/B4c7D9e3F1.html
m.gzyacf.cn/article/C5d8E0f4G2.html
m.gzyacf.cn/article/D6e9F1g5H3.html
m.gzyacf.cn/article/E7f0G2h6I4.html
m.gzyacf.cn/article/F8g1H3i7J5.html
m.gzyacf.cn/article/G9h2I4j8K6.html
m.gzyacf.cn/article/H0i3J5k9L7.html
m.gzyacf.cn/article/I1j4K6l0M8.html
m.gzyacf.cn/article/J2k5L7m1N9.html
m.gzyacf.cn/article/K3l6M8n2O0.html
m.gzyacf.cn/article/L4m7N9o3P1.html
m.gzyacf.cn/article/M5n8O0p4Q2.html
m.gzyacf.cn/article/N6o9P1q5R3.html
m.gzyacf.cn/article/O7p0Q2r6S4.html
m.gzyacf.cn/blog/P8q1R3s7T5.html
m.gzyacf.cn/blog/Q9r2S4t8U6.html
m.gzyacf.cn/blog/R0s3T5u9V7.html
m.gzyacf.cn/blog/S1t4U6v0W8.html
m.gzyacf.cn/blog/T2u5V7w1X9.html
m.gzyacf.cn/blog/U3v6W8x2Y0.html
m.gzyacf.cn/blog/V4w7X9y3Z1.html
m.gzyacf.cn/blog/W5x8Z0a4A2.html
m.gzyacf.cn/blog/X6y9A1b5B3.html
m.gzyacf.cn/blog/Y7z0B2c6C4.html
m.gzyacf.cn/blog/Z8a1C3d7D5.html
m.gzyacf.cn/article/a9b2D4e8E6.html
m.gzyacf.cn/article/b0c3E5f9F7.html
m.gzyacf.cn/article/c1d4F6g0G8.html
m.gzyacf.cn/article/d2e5G7h1H9.html
m.gzyacf.cn/article/e3f6H8i2I0.html
m.gzyacf.cn/article/f4g7I9j3J1.html
m.gzyacf.cn/article/g5h8J0k4K2.html
m.gzyacf.cn/article/h6i9K1l5L3.html
m.gzyacf.cn/article/i7j0L2m6M4.html
m.gzyacf.cn/article/j8k1M3n7N5.html
m.gzyacf.cn/article/k9l2N4o8O6.html
m.gzyacf.cn/article/l0m3O5p9P7.html
m.gzyacf.cn/article/m1n4P6q0Q8.html
m.gzyacf.cn/article/n2o5Q7r1R9.html
m.gzyacf.cn/article/o3p6R8s2S0.html
m.gzyacf.cn/article/p4q7S9t3T1.html
m.gzyacf.cn/article/q5r8T0u4U2.html
m.gzyacf.cn/article/r6s9U1v5V3.html
m.gzyacf.cn/article/s7t0V2w6W4.html
m.gzyacf.cn/article/t8u1W3x7X5.html
m.gzyacf.cn/article/u9v2X4y8Y6.html
m.gzyacf.cn/article/v0w3Y5z9Z7.html
m.gzyacf.cn/article/w1x4Z6a0A8.html