python魔法方法介绍

魔法方法就是pthon中类里一些__xxx__() 这种形式的函数。功能强大。

第一个当然是初始的创建方法
1. __init__(self[, ])
初始化一个类,意义自明

2. __str__(self[, ])和__repr__(self[, ])
__str__(a)等价于str(a);__repr__(a)等价于repr(a)
两者都是将实例对象转化为字符串的工具,__str__()针对用户;__repr__()针对开发者。当__str__()缺省时,会调用__repr__()函数。

class Test():
    def __init__(self, name):
        self.name = name
    def __str__(self):
        # 当调用print(object)打印类的说明,自动调用__str__函数
        # 当没有重写__str__函数时,默认返回的是 str(self),被重写后返回的也一定要是一串str
        return 'test __str__'
    def __repr__(self):
        return 'test __repr__'

a = Test('testname')
print(a)
print([a])

结果:

test __str__
[test __repr__]

结论:两者都是为了得到类的一些信息而将其转换位字符的函数,当直接处理成字符,如str() print()的时候,调用__str__;当不是直接将类处理成字符,如先变成list,tuple,dict等,再打印,都是调用__repr__也好理解嘛,用户谁给你玩list,tuple这些东西,都不知道是啥- -!
其中还有一个不同如:

import datetime

today = datetime.date.today()
print(str(today))
print(repr(today))

结果:

2019-01-06
datetime.date(2019, 1, 6)

str()得到的得到是易于认出辨识度高的字符串;repr()得到的是可以放在python中执行的字符串。
所以也可见一斑。

3. __call__(self[, ])
这个方法是使得被创建的对象,可以作为函数被调用

4. __name__
其实并不是一个方法,而是一个内置变量。只有一点:当在本py文件执行时,__name____main__;当作为import的module时,__name__为文件名。

# test.py文件
def main():
    print('name:', __name__)

if __name__ == '__main__':
    main()

#运行结果为:name:__main__
# test_name.py文件
import test

def main():
    print('name:', __name__)

if __name__ == '__main__':
    test.main()
    main()

结果为:

name: test
name: __main__

作用其实就一句话:“Make a script both importable and executable”
同时让python看起来有一个真正的入口吧(像C/C++/JAVA这种)

待续。。。。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值