基本魔术方法
**
__init__
**:对象初始化方法,在创建对象时调用。通常用来初始化对象的属性。1
2
3class Example:
def __init__(self, value):
self.value = value**
__repr__
**:返回对象的“官方”字符串表示形式。通常可以通过调用repr(object)
来查看。1
2
3class Example:
def __repr__(self):
return f"Example(value={self.value})"**
__str__
**:返回对象的“非正式”或友好字符串表示形式。通常可以通过调用str(object)
或print(object)
来查看。1
2
3class Example:
def __str__(self):
return f"Example with value {self.value}"**
__len__
**:返回对象的长度。常用于实现自定义容器类。1
2
3class Container:
def __len__(self):
return len(self.items)**
__getitem__
**:获取对象中指定键的值。通常用于实现自定义的索引操作。1
2
3class Container:
def __getitem__(self, key):
return self.items[key]**
__setitem__
**:设置对象中指定键的值。常用于实现可变容器。1
2
3class Container:
def __setitem__(self, key, value):
self.items[key] = value**
__delitem__
**:删除对象中指定键的值。1
2
3class Container:
def __delitem__(self, key):
del self.items[key]**
__iter__
**:返回一个迭代器对象。通常用于实现可迭代对象。1
2
3class Container:
def __iter__(self):
return iter(self.items)**
__contains__
**:检查对象是否包含指定的元素。通常用于in
操作符。1
2
3class Container:
def __contains__(self, item):
return item in self.items**
__call__
**:使实例对象可以像函数一样被调用。1
2
3class Example:
def __call__(self, value):
self.value = value**
__base__
**:返回当前类的基类。如SomeClass.__base__
会返回<class 'object'>
。**
__subclasses__()
**:查看当前类的子类组成的列表。1
Example.__subclasses__()
**
__builtins__
**:以一个集合的形式查看其引用。1
2import builtins
dir(builtins)**
__getattr__
、__setattr__
、__delattr__
**:处理对象属性的获取、设置和删除。1
2
3
4
5
6
7
8
9class Example:
def __getattr__(self, name):
return f"{name} not found"
def __setattr__(self, name, value):
self.__dict__[name] = value
def __delattr__(self, name):
del self.__dict__[name]**
__enter__
、__exit__
**:定义在使用with
语句时对象的上下文管理行为。1
2
3
4
5
6
7
8class Example:
def __enter__(self):
# Setup code
return self
def __exit__(self, exc_type, exc_val, exc_tb):
# Teardown code
pass**
__class__
**:指向对象的类。可以用来获取对象的类信息。1
2obj = Example()
print(obj.__class__) # <class '__main__.Example'>**
__delattr__
**:当试图删除对象的属性时调用。1
2
3
4class Example:
def __delattr__(self, name):
print(f"Deleting attribute {name}")
super().__delattr__(name)**
__dict__
**:包含对象(但不包括从类继承的属性)的属性字典。1
2obj = Example()
print(obj.__dict__) # {'attribute': value}**
__dir__
**:由dir()
函数调用,用于列出对象的属性和方法。1
2
3class Example:
def __dir__(self):
return ['custom_attribute', 'another_attribute']**
__doc__
**:类或方法的文档字符串。1
2
3class Example:
"""This is a docstring."""
print(Example.__doc__) # "This is a docstring."**
__eq__
**:实现对象的相等性比较,通常由==
操作符调用。1
2
3class Example:
def __eq__(self, other):
return self.value == other.value**
__format__
**:用于实现自定义的字符串格式化。1
2
3class Example:
def __format__(self, format_spec):
return f"Formatted value: {self.value:{format_spec}}"**
__ge__
**:实现对象的“大于等于”比较,通常由>=
操作符调用。1
2
3class Example:
def __ge__(self, other):
return self.value >= other.value**
__getattribute__
**:在访问对象属性时调用,优先于__getattr__
。1
2
3
4class Example:
def __getattribute__(self, name):
print(f"Accessing attribute {name}")
return super().__getattribute__(name)**
__getstate__
**:用于对象序列化时返回要保存的状态。1
2
3
4class Example:
def __getstate__(self):
state = self.__dict__.copy()
return state**
__gt__
**:实现对象的“大于”比较,通常由>
操作符调用。1
2
3class Example:
def __gt__(self, other):
return self.value > other.value**
__hash__
**:实现对象的哈希值计算,通常由hash()
函数调用。对象的哈希值应保持不变。1
2
3class Example:
def __hash__(self):
return hash(self.value)**
__init_subclass__
**:在子类化时调用,可以用来自定义子类的行为。1
2
3
4class Base:
def __init_subclass__(cls, **kwargs):
super().__init_subclass__(**kwargs)
cls.custom_attribute = True**
__le__
**:实现对象的“小于等于”比较,通常由<=
操作符调用。1
2
3class Example:
def __le__(self, other):
return self.value <= other.value**
__lt__
**:实现对象的“小于”比较,通常由<
操作符调用。1
2
3class Example:
def __lt__(self, other):
return self.value < other.value**
__module__
**:指向定义类的模块名称。1
2
3class Example:
pass
print(Example.__module__) # __main__**
__ne__
**:实现对象的不等性比较,通常由!=
操作符调用。1
2
3class Example:
def __ne__(self, other):
return self.value != other.value**
__new__
**:创建并返回一个新对象实例,通常在对象实例化时调用,优先于__init__
。1
2
3
4class Example:
def __new__(cls, *args, **kwargs):
instance = super().__new__(cls)
return instance**
__reduce__
**:用于定义对象序列化的行为,返回一个元组来帮助对象序列化。1
2
3class Example:
def __reduce__(self):
return (self.__class__, (self.value,))**
__reduce_ex__
**:与__reduce__
类似,但可以支持更多的协议版本。1
2
3class Example:
def __reduce_ex__(self, protocol):
return (self.__class__, (self.value,))**
__repr__
**:返回对象的“官方”字符串表示形式。通常可以通过调用repr(object)
来查看。1
2
3class Example:
def __repr__(self):
return f"Example(value={self.value})"**
__setattr__
**:当试图设置对象的属性时调用。1
2
3
4class Example:
def __setattr__(self, name, value):
print(f"Setting attribute {name} to {value}")
super().__setattr__(name, value)**
__sizeof__
**:返回对象占用的内存大小,通常由sys.getsizeof()
调用。1
2
3class Example:
def __sizeof__(self):
return object.__sizeof__(self) + sum(sys.getsizeof(v) for v in self.__dict__.values**
__subclasshook__
**:自定义类的子类检测逻辑。通常由issubclass()
调用。1
2
3
4class Base:
@classmethod
def __subclasshook__(cls, subclass):
return hasattr(subclass, 'custom_method')**
__weakref__
**:用于支持弱引用,如果类中没有__slots__
属性,则对象的弱引用字典会自动包含此属性。1
2
3
4
5
6
7
8import weakref
class Example:
pass
obj = Example()
r = weakref.ref(obj)
print(r) # <weakref at 0x...; to 'Example' at 0x...>
常用
__doc__
:查看默认类的帮助
dir()
查看类的所有属性
和方法
chr
,ord
ASCII码和字符的转换。
globals
:返回全局变量的函数
locals
:返回所有局部变量
__import__
:import os 等价于 os = __import__(‘os’)
__file__
:当前运行代码所在路径
_
:该变量返回上一次运行的python语句结果,但仅仅会在运行交互式终端
时产生,运行代码文件是不会有此变量。
About this Post
This post is written by void2eye, licensed under CC BY-NC 4.0.