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

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

作者: Jacob_LJ | 来源:发表于2018-05-22 22:28 被阅读12次

Python基础-面向对象(方法)

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("黄色")

>>>打印结果
创建了一个钢笔这个类型的画笔, 它是红色颜色
创建了一个钢笔这个类型的画笔, 它是绿色颜色
创建了一个钢笔这个类型的画笔, 它是黄色颜色
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
创建了一个铅笔这个类型的画笔, 它是红色颜色
创建了一个铅笔这个类型的画笔, 它是绿色颜色
创建了一个铅笔这个类型的画笔, 它是黄色颜色
  • 注意:这种方式是创建相似实例,仅仅有小部分不同

相关文章

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/hitljftx.html