赞
踩
魔法方法就是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这种)
待续。。。。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。