城市分类信息网站系统,tv电视盒子企业网站模板,怎样做网站店铺,用angular做的网站链接在Python中#xff0c;魔术方法#xff08;Magic Methods#xff09;或称为双下划线方法#xff08;Dunder Methods#xff09;#xff0c;是一类具有特殊用途的方法#xff0c;其名称前后都带有两个下划线#xff08;如 __init__、__str__ 等#xff09;。这些方法定…在Python中魔术方法Magic Methods或称为双下划线方法Dunder Methods是一类具有特殊用途的方法其名称前后都带有两个下划线如 __init__、__str__ 等。这些方法定义了对象的内置行为使得类的实例能够表现得像内置类型一样。以下是Python中一些常用的魔术方法及其使用示例
1. __init__(self, ...)
用于对象的初始化。在创建对象时调用。 python复制代码
class Person: def __init__(self, name, age): self.name name self.age age p Person(Alice, 30) print(p.name, p.age) # 输出: Alice 30
2. __str__(self)
定义对象的字符串表示。当使用 print() 或 str() 函数时调用。 python复制代码
class Person: def __init__(self, name, age): self.name name self.age age def __str__(self): return fPerson(name{self.name}, age{self.age}) p Person(Alice, 30) print(p) # 输出: Person(nameAlice, age30)
3. __repr__(self)
定义对象的“官方”字符串表示通常用于调试。repr() 函数会调用这个方法。 python复制代码
class Person: def __init__(self, name, age): self.name name self.age age def __repr__(self): return fPerson(name{self.name!r}, age{self.age!r}) p Person(Alice, 30) print(repr(p)) # 输出: Person(nameAlice, age30)
4. __add__(self, other)
定义加法运算符的行为。 python复制代码
class Vector: def __init__(self, x, y): self.x x self.y y def __add__(self, other): return Vector(self.x other.x, self.y other.y) v1 Vector(1, 2) v2 Vector(3, 4) v3 v1 v2 print(v3.x, v3.y) # 输出: 4 6
5. __getitem__(self, key)
定义获取元素的行为用于索引操作如 obj[key]。 python复制代码
class MyList: def __init__(self, elements): self.elements elements def __getitem__(self, key): return self.elements[key] ml MyList([1, 2, 3, 4, 5]) print(ml[1]) # 输出: 2
6. __setitem__(self, key, value)
定义设置元素的行为用于索引赋值操作如 obj[key] value。 python复制代码
class MyList: def __init__(self, elements): self.elements elements def __getitem__(self, key): return self.elements[key] def __setitem__(self, key, value): self.elements[key] value ml MyList([1, 2, 3, 4, 5]) ml[1] 10 print(ml[1]) # 输出: 10
7. __len__(self)
定义获取对象长度如列表长度的行为用于 len() 函数。 python复制代码
class MyList: def __init__(self, elements): self.elements elements def __len__(self): return len(self.elements) ml MyList([1, 2, 3, 4, 5]) print(len(ml)) # 输出: 5
8. __call__(self, *args, **kwargs)
定义对象像函数一样被调用的行为如 obj()。 python复制代码
class Adder: def __init__(self, n): self.n n def __call__(self, x): return x self.n add_five Adder(5) print(add_five(3)) # 输出: 8
9. __enter__(self) 和 __exit__(self, exc_type, exc_val, exc_tb)
用于定义对象的上下文管理行为通常与 with 语句一起使用。 python复制代码
class MyContext: def __enter__(self): print(Entering the context) return self def __exit__(self, exc_type, exc_val, exc_tb): print(Exiting the context) return False # 如果返回 True则异常会被忽略 with MyContext() as ctx: print(Inside the context) # 输出: # Entering the context # Inside the context # Exiting the context
这些魔术方法是Python面向对象编程中非常强大的一部分通过它们可以使自定义的类表现得更加自然和符合直觉。