在Python中,名称修饰(name-mangling)特性表示如果一个方法和属性使用了双下划线(__),则Python解释器会对这个方法或属性重命名。
class MyClass(object):
def __sec(self):
pass
print(MyClass.__dict__)
""
{'__doc__': None, '__module__': '__main__', '_MyClass__sec': 0x7efcf031bd08>, '__dict__': '__dict__' of 'MyClass' objects>, '__weakref__': '__weakref__' of 'MyClass' objects>}
""
但是这种功能并不是建议用来做私有属性用的,而是Python用来避免子类冲突,特别是在多重继承的上下文中。
特殊方法以双下划线开头和结束,可以称为dunder(double-underscore),它们可用于运算符重载、容器定义等。它们应该集中放在类定义的开头:
class MyClass(object):
def __repr__(self):
return 'hello {0}'.format(self.__class__)
def do_what(self):
pass
print(MyClass())
""
hello <class '__main__.MyClass'>
""
class DB:
is_connected = False
has_cache = False
connected_users = ['ZX']
tables = {
'account': ['id', 'name']
}
类的名称必须简明、精确,并足以使人理解类的作用。常见的做法是使用后缀表示其类型或特性:
1. SQLEngine
2. MimeTypes
3. StringWidget
对于基类和抽象类,可以使用一个Base或Abstract前缀:
1. BaseCookie
2. AbstractFormtter
最重要的是要和类的属性保持一致,尽量避免冗余:
1. SMTP.smtp_send() 这个命名空间存在冗余信息
2. SMTP.send() 这个可读性强,好好好!