• 17 python内置特殊方法


     1 __str__和__repr__
     2 如果要把一个类的实例变成 str,就需要实现特殊方法__str__():
     3 
     4 class Person(object):
     5     def __init__(self, name, gender):
     6         self.name = name
     7         self.gender = gender
     8     def __str__(self):
     9         return '(Person: %s, %s)' % (self.name, self.gender)
    10 现在,在交互式命令行下用 print 试试:
    11 
    12 >>> p = Person('Bob', 'male')
    13 >>> print p
    14 (Person: Bob, male)
    15 但是,如果直接敲变量 p:
    16 
    17 >>> p
    18 <main.Person object at 0x10c941890>
    19 似乎__str__() 不会被调用。
    20 
    21 因为 Python 定义了__str__()和__repr__()两种方法,__str__()用于显示给用户,而__repr__()用于显示给开发人员。
    22 
    23 有一个偷懒的定义__repr__的方法:
    24 
    25 class Person(object):
    26     def __init__(self, name, gender):
    27         self.name = name
    28         self.gender = gender
    29     def __str__(self):
    30         return '(Person: %s, %s)' % (self.name, self.gender)
    31     __repr__ = __str__
    32 任务
    33 请给Student 类定义__str__和__repr__方法,使得能打印出<Student: name, gender, score>34 
    35 class Student(Person):
    36     def __init__(self, name, gender, score):
    37         super(Student, self).__init__(name, gender)
    38         self.score = score
    39 ?不会了怎么办
    40 只要为Students 类加上__str__()和__repr__()方法即可。
    41 
    42 参考代码:
    43 
    44 class Person(object):
    45     def __init__(self, name, gender):
    46         self.name = name
    47         self.gender = gender
    48 
    49 class Student(Person):
    50     def __init__(self, name, gender, score):
    51         super(Student, self).__init__(name, gender)
    52         self.score = score
    53     def __str__(self):
    54         return '(Student: %s, %s, %s)' % (self.name, self.gender, self.score)
    55     __repr__ = __str__
    56 
    57 s = Student('Bob', 'male', 88)
    58 print s    ## 会调用__str__()函数
    59 
    60 
    61 
    62 ########################  __call__()  ################################################
    63 一个类实例也可以变成一个可调用对象,只需要实现一个特殊方法。
    64 
    65 Python中,如果在创建class的时候写了call()方法, 那么该class实例化出实例后, 实例名()就是调用call()方法。
    66 
    67 
    68 class Person(object):
    69     def __init__(self, name, gender):
    70         self.name = name
    71         self.gender = gender
    72 
    73     def __call__(self, friend):
    74         print 'My name is %s...' % self.name
    75         print 'My friend is %s...' % friend
    76 
    77 
    78 p=Person('huang',88)   ## 此步执行时,即类实例化了,构造函数会自动执行
    79 p('xiaren')   ## 只有此步,才会自动调用__call__内置方法
  • 相关阅读:
    linux命令总结
    在阿里云centos7.6上部署vue.js2.6前端应用
    MongoDb语法
    Echarts 地图绘制
    在阿里云Centos7.6中部署nginx1.16+uwsgi2.0.18+Django2.0.4
    django--- 支付宝退款
    响应式网站设计(Responsive Web design)
    django -- 推荐商品算法
    django -- 美多订单分表
    小程序基本配置
  • 原文地址:https://www.cnblogs.com/2mei/p/9254195.html
Copyright © 2020-2023  润新知