《Python 类与对象进阶》
1. 新式类(继承 object)
Python 3 中所有类都是新式类,继承 object 后可以使用 super()、描述符、__slots__ 等魔法:
class OldClass(): # 老式类写法(Python2)
def __init__(self):
print('I am an old class')
class NewClass(object): # 新式类
def __init__(self):
print('I am a jazzy new class')
old = NewClass() # I am a jazzy new class
建议:即便 Python 3 默认已新式,仍显式继承
object以保持可读性。
2. 使用 slots 减少内存占用
默认情况下 Python 用 dict 存储实例属性,灵活但浪费内存。对于属性固定的小类,用 __slots__ 让 Python 只分配固定空间的属性:
class PointWithSlots(object):
__slots__ = ('x', 'y')
def __init__(self, x, y):
self.x = x
self.y = y
当创建成千上万个对象(尤其实例数量巨大时),__slots__ 能显著减少内存。
3. 单下划线与双下划线前缀
_name:约定俗成的“受保护”成员,仅为约定。__name:名称改写(name mangling),ClassName__name,通常用于类内部私有属性防止被子类覆盖。
Reference: https://docs.python.org/3/tutorial/classes.html#private-variables
4. init.py 与 all
__init__.py可将所需模块批量导入,使用方不再逐个 import。__all__配合from module import *一次性导入模块全部对外符号。
5. format 与 print 中输出 %
% 是格式化特殊字符,需要转义:
print('Hello%%20World%s' % '!')
# Hello%20World!
阅读 —
·
全站 —