让打印更加好看
示例
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 定制类 __str__
class Animal(object):
def __init__(self, name):
self.name = name
# 让打印更加好看
def __str__(self):
return "Animal' name is " + self.name;
# 运行方法
def runTest():
print(Animal("旺财"))
# 运行
runTest()
运行结果
D:\PythonProject>python main.py
Animal' name is 小狗
如果一个类想被用于for … in循环,类似list或tuple那样,就必须实现一个iter()方法,该方法返回一个迭代对象,然后,Python的for循环就会不断调用该迭代对象的next()方法拿到循环的下一个值,直到遇到StopIteration错误时退出循环。
运行实例
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 如果一个类想被用于for ... in循环,类似list或tuple那样,就必须实现一个__iter__()方法,该方法返回一个迭代对象,
# 然后,Python的for循环就会不断调用该迭代对象的__next__()方法拿到循环的下一个值,直到遇到StopIteration错误时退出循环。
class Count(object):
def __init__(self):
self.a = 0
def __iter__(self):
# 实例本身就是一个Iterator对象
return self
def __next__(self):
self.a = self.a + 1
if (self.a > 10):
raise StopIteration()
return self.a
# 运行方法
def runTest():
for n in Count():
print(n)
# 运行
runTest()
运行结果
D:\PythonProject>python main.py
1
2
3
4
5
6
7
8
9
10
取某一个子项,像List一样取值
运行实例
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# __getitem__
class Count(object):
def __getitem__(self, a):
return a * a
# 运行方法
def runTest():
print(Count()[5])
# 运行
runTest()
运行结果
D:\PythonProject>python main.py
25
自定义取不到属性的错误信息提示
示例
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# __getattr__
class Count(object):
def __getattr__(self, attr):
return "自定义取不到属性的错误信息提示"
# 运行方法
def runTest():
print(Count().a)
# 运行
runTest()
运行结果
D:\PythonProject>python main.py
自定义取不到属性的错误信息提示
任何类,只需要定义一个call()方法,就可以直接对实例进行调用
示例
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 任何类,只需要定义一个__call__()方法,就可以直接对实例进行调用
class Count(object):
def __call__(self):
print("任何类,只需要定义一个__call__()方法,就可以直接对实例进行调用")
# 运行方法
def runTest():
c = Count()
c()
# 运行
runTest()
运行结果
D:\PythonProject>python main.py
任何类,只需要定义一个__call__()方法,就可以直接对实例进行调用