Python基础22-面向对象(系统内置方法2-调用操作)

2 调用操作

2.1 __call__

作用
    使得“对象”具备当做函数,来调用的能力
使用
    1. 实现实例方法 __call__
    2. 那么创建好的实例, 就可以通过函数的形式来调用
        实例(参数)
应用场景
    有点类似于之前所讲的"偏函数"的应用场景
    可以将"常变参数"和"不常变参数"进行分离
案例
    不同类型的笔, 画不同的图形
  • 简单 call 方法是使用
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)

  • 参考偏函数,使用__call__ 方法
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("黄色")

>>>打印结果
创建了一个钢笔这个类型的画笔, 它是红色颜色
创建了一个钢笔这个类型的画笔, 它是绿色颜色
创建了一个钢笔这个类型的画笔, 它是黄色颜色
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
创建了一个铅笔这个类型的画笔, 它是红色颜色
创建了一个铅笔这个类型的画笔, 它是绿色颜色
创建了一个铅笔这个类型的画笔, 它是黄色颜色
  • 注意:这种方式是创建相似实例,仅仅有小部分不同
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  •   面向对象(Object-Oriented,OO)的语言有一个标志,那就是它们都有类的概念,而通过类可以创建任意...
    霜天晓阅读 2,172评论 0 6
  • 定义类并创建实例 在Python中,类通过 class 关键字定义。以 Person 为例,定义一个Person类...
    绩重KF阅读 4,018评论 0 13
  • 〇、前言 本文共108张图,流量党请慎重! 历时1个半月,我把自己学习Python基础知识的框架详细梳理了一遍。 ...
    Raxxie阅读 19,176评论 17 410
  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,776评论 8 265
  • 昨天给一个特好的朋友(就是那种兴趣爱好在同一个层面的那种)无意间说起了燕子,也就半个小时,也成了个小迷妹,双十一还...
    大爱燕子阅读 1,896评论 2 0