流程的Python
第九章总结
- __ iter __把实例变成可迭代实例。
- print()调用__str__而非__repr__方法。
- ==的特殊方法为__eq__。
- 两个装饰器
@classmethod装饰函数,指明为类方法,而非实例方法。
@staticmethod装饰器,指明为静态方法,即普通方法。只是恰好在类中,而非模块中,不是很有用,如果不想与类交互,直接在模块中定义就好了。
- 格式化显示
format()和str.format()
>>> brl = 1/2.43
>>> brl
0.4115226337448559
>>> format(brl, '0.4f')
'0.4115'
>>> '{rate:0.2f}'.format(rate = brl)
'0.41'
https://blog.csdn.net/xyx_x/article/details/90202813
具体使用看上一个链接。
格式化输出是可扩展的,每个类可以自行定义__format__函数。如datatime模块中的类,
>>> from datetime import datetime
>>> now = datetime.now()
>>> format(now, '%H:%M:%S')
'12:19:24'
>>> "It's now {:%H:%M:%S}".format(now)
"It's now 12:19:24"
如果类中没有定义__format__函数,则会返回str(object)。
- Python的私有属性和受保护的属性
Python没有private,但是可以将属性前加两个下划线,这样属性会被存在实例的__dict__属性中,而此时的名称变为_类名__属性名。但是这样不好,如果知道这种机制,同样可以改写这个属性。所以尽量不要用。Python程序员有个约定,在需要private的属性名前加一个下划线,Python解释器不会对这个属性做任何特殊处理。
- 覆盖类属性
当实例使用类属性时,如self.类属性,此时获得的就是类属性的值,但是如果改写这个实例的类属性,不会改变原来的类属性,只是改变这个实例的类属性。如果想要修改原来的类属性,需要使用类.类属性来改写。这个类属性子类可以继承。