2020-03-01

Python魔法方法
魔法方法特点:

  • 两侧各有连个下划线__
  • 名字不能改动,可以重写,会在恰当的时候自动调用。
  1. init方法
    __init__方法,在创建对象的时候默认被调用。
  2. del方法
    删除对象时默认调用这个方法。
  3. str方法
class Cat:
    def __init__(self,name,color):
        self.name = name
        self.color = color

tom = Cat('Tom','white')

# 使用 print 方法打印对象时,会调用对象的 __str__ 方法,默认会打印类名和对象的地址名
print(tom)   # <__main__.Cat object at 0x0000021BE3B9C940>

如果想要修改对象的输出的结果,可以重写 str 方法。

class Person:
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def __str__(self):
        return '哈哈'

p  = Person('张三',18)
print(p)   # 哈哈  打印对象时,会自动调用对象的 __str__ 方法
  1. repr方法
    str方法类似。
class Student:
    def __init__(self, name, score):
        self.name = name
        self.score = score

    def __repr__(self):
        return 'helllo'


class Person:
    def __repr__(self):
        return 'hi'

    def __str__(self):
        return 'good'


s = Student('lisi', 95)
print(s)  # hello

p = Person()
print(p)  # good

上面的代码可以看出这两个方法的调用顺序。

  1. call方法
    对象后面加括号,触发执行。
class Foo:
    def __init__(self):
        pass

    def __call__(self, *args, **kwargs):
        print('__call__')


obj = Foo()  # 执行 __init__
obj()  # 执行 __call__

总结

当创建一个对象时,会自动调用init方法,当删除一个对象时,会自动调用del方法。
使用strrepr方法,都会修改一个对象转换成为字符串的结果。一般来说,str方法的结果更加在意可读性,而repr方法的结果更加在意正确性(例如:datetime模块里的datetime类)

运算相关的魔法方法

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • API(Application Programming Interface,应用程序接口)是一些预先定义的函数,或...
    小丹子1o1阅读 382评论 0 0
  • 面向对象是啥? 面向对象与面向过程的区别 +. 面向过程:根据业务逻辑从上到下写代码。+. 面向对象:将变量与函数...
    ouchaowen阅读 105评论 0 0
  • 1.错误日志(log_error) 记录启动\关闭\日常运行过程中,状态信息,警告,错误 错误日志配置 默认就是开...
    桑正阅读 279评论 0 0
  • 这种类型的妹子,往往心里都住着一个人。这个人,也许是她暗恋的人,她的初恋或者她的前任。他让她念念不忘,即使他们从未...
    WHITE_白白阅读 353评论 0 1
  • 中午,手机微信突然闪过一则“服务通知”: 想起几天前,如往常一样,浏览咪蒙的文章。文末有段关于“咪蒙团队新书在北京...
    文若生阅读 646评论 16 10

友情链接更多精彩内容