📅  最后修改于: 2023-12-03 14:46:37.658000             🧑  作者: Mango
在Python中,有一些特殊的内置方法,被称为双下划线方法,也叫作Dunder(Double UnderScore,双下划线)或魔术(Magic)方法。这些方法的名字以双下划线开头和结尾,比如__init__
,__new__
,__str__
等。
这些内置方法可以在类的定义中被实现,影响类的行为和操作。以下是一些常用的魔术方法:
__init__
__init__
方法是在创建新对象时自动调用的构造函数。它可以在对象创建时初始化一些属性等操作。比如:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
person = Person("Alice", 18)
print(person.name) # 输出:Alice
print(person.age) # 输出:18
__str__
__str__
方法用于在打印对象时自定义输出格式。比如:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"{self.name} is {self.age} years old."
person = Person("Alice", 18)
print(person) # 输出:Alice is 18 years old.
__repr__
__repr__
方法用于在使用repr()
函数时返回一个可打印的字符串表示。比如:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __repr__(self):
return f"Person({self.name}, {self.age})"
person = Person("Alice", 18)
print(repr(person)) # 输出:Person(Alice, 18)
__len__
__len__
方法用于在使用len()
函数时返回对象的长度。比如:
class MyList:
def __init__(self, data=None):
self.data = data or []
def __len__(self):
return len(self.data)
my_list = MyList([1, 2, 3])
print(len(my_list)) # 输出:3
__getitem__
和__setitem__
__getitem__
方法用于获取对象中某个元素的值,可以使用索引或切片。__setitem__
方法用于设置对象中某个元素的值,同样可以使用索引或切片。比如:
class MyList:
def __init__(self, data=None):
self.data = data or []
def __len__(self):
return len(self.data)
def __getitem__(self, index):
return self.data[index]
def __setitem__(self, index, value):
self.data[index] = value
my_list = MyList([1, 2, 3])
print(my_list[1]) # 输出:2
my_list[1] = 5
print(my_list[1]) # 输出:5
__call__
__call__
方法用于将对象作为函数一样调用。比如:
class Counter:
def __init__(self):
self.count = 0
def __call__(self):
self.count += 1
return self.count
counter = Counter()
print(counter()) # 输出:1
print(counter()) # 输出:2
以上仅是常见的几个Dunder或魔术方法,还有其他的方法可以在需要时实现。Dunder或魔术方法的主要作用是增强了类的可定制性和灵活性,同时可以方便地实现一些Python中常见的操作,比如打印、比较、切片等。