1. python类中的内置方法
Python是一种面向对象的语言。在面向对象编程中,我们使用类来创建对象。类定义了对象的属性和方法,其中方法是一组指定操作的代码。
Python提供了一组内置方法,它们可以在类中直接调用。这些方法可以帮助我们更轻松地创建和管理对象。在本篇文章中,我们将讨论Python类中的一些常用内置方法。
1.1 __init__方法
__init__方法是Python中类的特殊方法之一。在创建一个新对象时,__init__方法会自动调用。这个方法通常用于初始化对象的属性,为对象设置默认值。
下面是一个例子,它定义了一个名为Person的类,该类具有一个初始化方法,用于设置属性:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
在上面的例子中,我们定义了一个名为Person的类,并在__init__方法中定义了两个属性,name和age。在创建一个新的Person对象时,我们可以使用以下语法:
person = Person('Tom', 25)
在上面的代码中,我们创建了一个名为person的对象,并在创建对象时传递了两个参数name和age。这些参数将传递到__init__方法中,用于设置对象的属性。
1.2 __str__方法
__str__方法是Python中类的另一个特殊方法,用于提供对象的字符串表示形式。当我们使用print语句打印一个对象时,Python会自动调用其__str__方法。
下面是一个例子,它定义了一个名为Person的类,并在__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的类,并在__str__方法中定义了对象的字符串表示形式。在创建一个新的Person对象时,我们可以使用以下语法:
person = Person('Tom', 25)
print(person)
在上面的代码中,我们创建了一个名为person的对象,并使用print语句打印了该对象。由于我们在__str__方法中定义了字符串表示形式,因此打印语句将输出Tom is 25 years old。
1.3 __len__方法
__len__方法是Python中类的另一个特殊方法,用于返回对象的长度。当我们使用len函数查找对象的长度时,Python会自动调用其__len__方法。
下面是一个例子,它定义了一个名为MyList的类,并在__len__方法中定义了对象的长度:
class MyList:
def __init__(self, data):
self.data = data
def __len__(self):
return len(self.data)
在上面的例子中,我们定义了一个名为MyList的类,并在__len__方法中定义了对象的长度。在创建一个新的MyList对象时,我们可以使用以下语法:
my_list = MyList([1, 2, 3, 4, 5])
print(len(my_list))
在上面的代码中,我们创建了一个名为my_list的对象,并使用len函数查找其长度。由于我们在__len__方法中定义了长度,因此len函数将输出对象的长度5。
1.4 __getitem__方法
__getitem__方法是Python中类的另一个特殊方法,用于获取对象的元素。当我们使用方括号访问对象的元素时,Python会自动调用其__getitem__方法。
下面是一个例子,它定义了一个名为MyList的类,并在__getitem__方法中定义了对象的元素:
class MyList:
def __init__(self, data):
self.data = data
def __getitem__(self, index):
return self.data[index]
在上面的例子中,我们定义了一个名为MyList的类,并在__getitem__方法中定义了对象的元素。在创建一个新的MyList对象时,我们可以使用以下语法:
my_list = MyList([1, 2, 3, 4, 5])
print(my_list[3])
在上面的代码中,我们创建了一个名为my_list的对象,并使用方括号访问其第4个元素。由于我们在__getitem__方法中定义了元素,因此打印语句将输出4。
1.5 __setitem__方法
__setitem__方法是Python中类的另一个特殊方法,用于设置对象的元素。当我们使用方括号为对象设置元素时,Python会自动调用其__setitem__方法。
下面是一个例子,它定义了一个名为MyList的类,并在__setitem__方法中定义了对象的元素:
class MyList:
def __init__(self, data):
self.data = data
def __setitem__(self, index, value):
self.data[index] = value
在上面的例子中,我们定义了一个名为MyList的类,并在__setitem__方法中定义了对象的元素。在创建一个新的MyList对象时,我们可以使用以下语法:
my_list = MyList([1, 2, 3, 4, 5])
my_list[3] = 10
print(my_list[3])
在上面的代码中,我们创建了一个名为my_list的对象,并使用方括号设置其第4个元素。我们将其设置为10,并使用方括号访问其第4个元素。由于我们在__setitem__方法中定义了元素,因此打印语句将输出10。
1.6 __delitem__方法
__delitem__方法是Python中类的另一个特殊方法,用于删除对象的元素。当我们使用del语句删除对象的元素时,Python会自动调用其__delitem__方法。
下面是一个例子,它定义了一个名为MyList的类,并在__delitem__方法中定义了对象的元素:
class MyList:
def __init__(self, data):
self.data = data
def __delitem__(self, index):
del self.data[index]
在上面的例子中,我们定义了一个名为MyList的类,并在__delitem__方法中定义了对象的元素。在创建一个新的MyList对象时,我们可以使用以下语法:
my_list = MyList([1, 2, 3, 4, 5])
del my_list[3]
print(my_list[3])
在上面的代码中,我们创建了一个名为my_list的对象,并使用del语句删除了其第4个元素。我们使用方括号访问其第4个元素,并发现它已经被删除了。
1.7 __contains__方法
__contains__方法是Python中类的另一个特殊方法,用于确定对象是否包含指定的元素。当我们使用in运算符判断对象是否包含指定的元素时,Python会自动调用其__contains__方法。
下面是一个例子,它定义了一个名为MyList的类,并在__contains__方法中定义了对象包含指定元素的方式:
class MyList:
def __init__(self, data):
self.data = data
def __contains__(self, value):
return value in self.data
在上面的例子中,我们定义了一个名为MyList的类,并在__contains__方法中定义了对象包含指定元素的方式。在创建一个新的MyList对象时,我们可以使用以下语法:
my_list = MyList([1, 2, 3, 4, 5])
print(3 in my_list)
在上面的代码中,我们创建了一个名为my_list的对象,并使用in运算符判断它是否包含元素3。由于我们在__contains__方法中定义了对象包含元素的方式,因此打印语句将输出True。
1.8 __eq__方法
__eq__方法是Python中类的另一个特殊方法,用于比较两个对象是否相等。当我们使用==运算符比较两个对象时,Python会自动调用其__eq__方法。
下面是一个例子,它定义了一个名为Person的类,并在__eq__方法中定义了对象相等的方式:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __eq__(self, other):
return self.name == other.name and self.age == other.age
在上面的例子中,我们定义了一个名为Person的类,并在__eq__方法中定义了对象相等的方式。在创建两个新的Person对象时,我们可以使用以下语法:
person1 = Person('Tom', 25)
person2 = Person('Tom', 25)
print(person1 == person2)
在上面的代码中,我们创建了两个名为person1和person2的对象,并使用==运算符比较它们是否相等。由于我们在__eq__方法中定义了对象相等的方式,因此打印语句将输出True。
1.9 __hash__方法
__hash__方法是Python中类的另一个特殊方法,用于返回对象的哈希值。哈希值是对象的固定大小的表示形式,它用于快速比较对象的值。当我们使用哈希表存储对象时,Python会自动调用其__hash__方法。
下面是一个例子,它定义了一个名为Person的类,并在__hash__方法中定义了对象的哈希值:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __hash__(self):
return hash((self.name, self.age))
在上面的例子中,我们定义了一个名为Person的类,并在__hash__方法中定义了对象的哈希值。在创建一个新的Person对象时,我们可以使用以下语法:
person = Person('Tom', 25)
print(hash(person))
在上面的代码中,我们创建了一个名为person的对象,并使用hash函数查找其哈希值。由于我们在__hash__方法中定义了哈希值,因此hash函数将输出一个固定大小的值。
1.10 __getattr__方法
__getattr__方法是Python中类的另一个特殊方法,用于在对象上访问不存在的属性时调用。当我们尝试访问对象上不存在的属性时,Python会自动调用其__getattr__方法。
下面是一个例子,它定义了一个名为Person的类,并在__getattr__方法中定义了访问不存在的属性的方式:
class Person:
def __init__(self, name):
self.name = name
def __getattr__(self, attr):
return f'{attr} is not a valid attribute'
在上面的例子中,我们定义了一个名为Person的类,并在__getattr__方法中定义了访问不存在的属性的方式。在创建一个新的Person对象时,我们可以使用以下语法:
person = Person('Tom')
print(person.age)
在上面的代码中,我们创建了一个名为person的对象,并尝试访问不存在的属性age。由于我们在__getattr__方法中定义了访问不存在的属性的方式,因此打印语句将输出age is not a valid attribute。
1.11 __call__方法
__call__方法是Python中类的另一个特殊方法,用于将对象转换为可调用对象。当我们在对象上使用括号调用对象时,Python会自动调用其__call__方法。
下面是一个例子,它定义了一个名为Person的类,并在__call__方法中定义了对象的调用方式:
class Person:
def __init__(self, name):
self.name = name
def __call__(self, message):
return f'{self.name} says {message}'
在上面的例子中,我们定义了一个名为Person的类,并在__call__方法中定义了对象的调用方式。在创建一个新的Person对象时,我们可以使用以下语法:
person = Person('Tom')
print(person('Hello'))
在上面的代码中,我们创建了一个名为person的对象,并将其视为可调用对象。我们使用括号调用了该对象,并传递了一个参数Hello。由于我们在__call__方法中定义了对象的调用方式,因此打印语句将输出Tom says Hello。
2. 结论
Python类提供了一组内置方法,它们可以方便地创建和管理对象。在本篇文章中,我们讨论了Python类中的一些常用内置方法,包括__init__,__str__,__len__,__getitem__,__setitem__,__delitem__,__contains__,__eq__,__hash__,__getattr__和__call__方法。这些方法可以帮助我们更轻松地创建和管理对象。