• __call__ 和 __str__ 魔术方法


    魔术方法,在python中,是通过触发的形式调用,之所以称为魔术方法,
    是因为不需要特地的打印或调用它,在某些特定的时候,他会自己调用,所谓的特定的时候,
    也是我们自己所输入的代码操作的,不是莫名其妙的触发调用

    比如说定义一个矩形类,有长和宽两个实例属性,还有一个计算面积的方法,

    实现类的实例可调用调用打印边长;同时,直接打印类实例
    时能够打印出来实例的面积

    类的实例可调用,用到的是__call__方法,
      形如:类名(),就会直接打印所设计的代码内容

    按照正常的面向对象的方法,如果定义了一个类,我们的实例化操作是:
      定义一个实参,去接受类名的实例化(a = LeiMing()),
      如果我们直接打印这个实参,将会返回这个类在内存中的地址信息

    但是加上__str__魔术方法,直接打印实例,将会打印出__str__方法下的多输入的代码编译内容

    如上所要求的题目,给出代码:
     1 class Area:
     2     """定义一个面积类"""
     3     def __init__(self, long, wid):
     4         """初始化长和宽"""
     5         self.long = long
     6         self.wid = wid
     7 
     8     def area(self):
     9         """计算面积"""
    10         mianji = int(self.long) * int(self.wid)
    11         return '面积是:' + str(mianji)
    12 
    13 class Square(Area):
    14     """继承Area类,打印面积和打印边长"""
    15     def __str__(self):  # print(实例)
    16         return self.area()
    17 
    18     def __call__(self, *args, **kwargs):   # 实例调用
    19         print('边长是:' + str(self.long))
    20 
    21 
    22 square = Square(7,7)    # 实例化
    23 print(square)    # 打印实例
    24 square()    # 调用实例
    
    
    
    结果:
     
     
  • 相关阅读:
    c++ 对象大小内存占用分析
    运维(SA)修仙 之路 II
    分享好文章-Ansible 进阶技巧
    java JWT 登录认证
    ftp:500 OOPS: chroot
    centos 磁盘清理
    redis分析命令
    linux查找内容
    vim使用
    查看进程端口
  • 原文地址:https://www.cnblogs.com/pywjh/p/9488624.html
Copyright © 2020-2023  润新知