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这种)

待续。。。。

你可能感兴趣的:(python魔法方法介绍)