Single Underscore (_name)
Tên trong class có leading underscore chỉ ra ý định internal use (semi-private) cho programmer khác.
Theo PEP 8:
_single_leading_underscore: weak "internal use" indicator. Ví dụ:from M import *không import object tên bắt đầu bằng underscore.
Ví dụ so sánh
class MyClass:
def __init__(self):
self.__full_private = "World" # name mangling
self._semi_private = "Hello" # convention only
obj = MyClass()
print(obj._semi_private) # Hello - truy cập bình thường
print(obj.__full_private) # AttributeError
# Truy cập thực sự: obj._MyClass__full_private
Kết quả
Hello AttributeError: 'MyClass' object has no attribute '__full_private'
Tóm tắt: _ = quy ước (convention), __ = name mangling (enforcement nhẹ).