Python基础-面向对象(方法)
2 调用操作
2.1 __call__
作用
使得“对象”具备当做函数,来调用的能力
使用
1. 实现实例方法 __call__
2. 那么创建好的实例, 就可以通过函数的形式来调用
实例(参数)
应用场景
有点类似于之前所讲的"偏函数"的应用场景
可以将"常变参数"和"不常变参数"进行分离
案例
不同类型的笔, 画不同的图形
class Person:
def __call__(self, *args, **kwargs):
print("xxx", args, kwargs)
pass
p = Person()
p(123, 456, name="fkm")
>>> 打印结果
xxx (123, 456) {'name': 'fkm'}
#题目:创建很多个画笔, 画笔的类型(钢笔, 铅笔), 画笔的颜色(红, 黄色, 青色, 绿色)
print("创建了一个%s这个类型的画笔, 它是%s颜色" % ("钢笔", "红色"))
print("创建了一个%s这个类型的画笔, 它是%s颜色" % ("钢笔", "黄色"))
print("创建了一个%s这个类型的画笔, 它是%s颜色" % ("钢笔", "青色"))
print("-" * 10 + "以上是 普通 写法" + "-" * 10)
def createPen(p_color, p_type):
print("创建了一个%s这个类型的画笔, 它是%s颜色" % (p_type, p_color))
createPen("钢笔", "红色")
createPen("钢笔", "绿色")
createPen("钢笔", "黄色")
print("-" * 10 + "以上是 函数式 写法" + "-" * 10)
import functools
gangbiFunc = functools.partial(createPen, p_type="钢笔")
gangbiFunc("红色")
gangbiFunc("黄色")
gangbiFunc("绿色")
print("-" * 10 + "以上是 偏函数 写法" + "-" * 10)
class PenFactory:
def __init__(self, p_type):
self.p_type = p_type
def __call__(self, p_color):
print("创建了一个%s这个类型的画笔, 它是%s颜色" % (self.p_type, p_color))
gangbiF = PenFactory("钢笔")
gangbiF("红色")
gangbiF("绿色")
gangbiF("黄色")
print(" - " * 20)
qianbiF = PenFactory("铅笔")
qianbiF("红色") # 实例调用 call 方法
qianbiF("绿色")
qianbiF("黄色")
>>>打印结果
创建了一个钢笔这个类型的画笔, 它是红色颜色
创建了一个钢笔这个类型的画笔, 它是绿色颜色
创建了一个钢笔这个类型的画笔, 它是黄色颜色
- - - - - - - - - - - - - - - - - - - -
创建了一个铅笔这个类型的画笔, 它是红色颜色
创建了一个铅笔这个类型的画笔, 它是绿色颜色
创建了一个铅笔这个类型的画笔, 它是黄色颜色
网友评论