python的魔术方法
class Professor:
def __init__(self, name, department, research_areas):
self.name = name
self.department = department
self.research_areas = research_areas
def __str__(self):
return f"{self.name} works in {self.department} department and researches {', '.join(self.research_areas)}"
def __len__(self):
return len(self.name)
def __getitem__(self, i):
return self.research_areas[i]
def __setitem__(self, i, value):
self.research_areas[i] = value
def __delitem__(self, i):
del self.research_areas[i]
def __iter__(self):
return iter(self.research_areas)
def __next__(self):
if self.index >= len(self.research_areas):
raise StopIteration
result = self.research_areas[self.index]
self.index += 1
return result
def __call__(self, *args):
print(f"{self.name} is giving a lecture on {', '.join(args)}")
# 创建Professor实例
prof = Professor("John Doe", "Computer Science", ["machine learning", "computer vision", "natural language processing"])
# 调用__str__()方法
print(str(prof))
# 调用__len__()方法
print(len(prof))
# 调用__getitem__()方法
print(prof[0])
# 调用__setitem__()方法
prof[1] = "deep learning"
print(prof[1])
# 调用__delitem__()方法
del prof[0]
print(prof)
# 调用__iter__()方法
for area in prof:
print(area)
# 调用__call__()方法
prof("machine learning", "computer vision")
创建了一个名为prof的Professor类的实例,并通过不同的方式调用了不同的魔术方法。我们首先调用__str__()方法以字符串形式打印出prof实例的描述。接着,我们调用__len__()方法获取教授姓名的长度。然后,我们调用__getitem__()和__setitem__()方法,以获取和设置实例属性research_areas的值。接下来,我们使用__delitem__()方法删除实例属性research_areas中的一个元素。然后,我们调用__iter__()和__next__()方法,以对research_areas进行迭代。最后,我们调用__call__()方法,以模拟教授正在讲授某些领域的课程。
页面更新:2024-04-23
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号