{site_name}

{site_name}

🌜 搜索

Python抽象协议支持指的是Python语言内置了一些特定的接口(即协议),用

Python 𝄐 0
python抽象方法,python怎么定义抽象类,python 抽象语法树,php 抽象类和抽象接口的区别,python抽象类,python抽象类有什么用
Python抽象协议支持指的是Python语言内置了一些特定的接口(即协议),用于定义对象应该具备的行为和方法,以便在不同上下文中使用这些对象。

这些协议包括但不限于可迭代协议、可调用协议、哈希协议、比较协议等。通过遵循这些协议,我们可以确保自己编写的代码可以与其他实现了相同协议的对象进行交互,而无需关心对象背后的具体实现细节。

以下是一些常见的抽象协议及其示例:

1. 可迭代协议(Iterable Protocol):定义了一个 __iter__() 方法,使对象可以被迭代。例如,列表(list)、元组(tuple)、集合(set)和字符串(str)都是可迭代对象,它们都实现了 __iter__() 方法。


class MyList:
def __init__(self, data):
self.data = data

def __iter__(self):
return iter(self.data)

my_list = MyList([1, 2, 3])
for i in my_list:
print(i)


2. 可调用协议(Callable Protocol):定义了一个 __call__() 方法,使对象可以像函数一样被调用。例如,函数本身就是可调用对象,它们实现了 __call__() 方法。


class Adder:
def __init__(self, x):
self.x = x

def __call__(self, y):
return self.x + y

add5 = Adder(5)
print(add5(3)) # 输出8


3. 哈希协议(Hashable Protocol):定义了一个 __hash__() 方法,使对象可以被哈希,并保证相同内容的对象具有相同的哈希值。例如,数字、字符串和元组都是可哈希对象。


class Person:
def __init__(self, name, age):
self.name = name
self.age = age

def __hash__(self):
return hash((self.name, self.age))

person1 = Person('Alice', 25)
person2 = Person('Bob', 30)

print(hash(person1)) # 输出1455556622658026097
print(hash(person2)) # 输出-4071470523699704684


4. 比较协议(Comparison Protocol):定义了一组比较运算符方法,使对象可以像数字或字符串一样进行比较。例如,数字和字符串都是可比较对象。


class Circle:
def __init__(self, radius):
self.radius = radius

def __lt__(self, other):
return self.radius < other.radius

def __eq__(self, other):
return self.radius == other.radius

circle1 = Circle(5)
circle2 = Circle(3)

print(circle1 > circle2) # 输出True
print(circle1 == circle2) # 输出False