1. 当类实现了__bytes__ 和 format,它们分别会在什么情况下被调用?
1.
__bytes__
:在print和bytes(对象时), 这就像我在第一章所说的__str__
__format__
:在内置的 format() 函数和 str.format() 方法调用
1. classmethod的作用?
2. 什么时候使用staticmethod ?
1. classmethod 改变了调用方法的方式,因此类方法的第一个参数是类本身,而不是实例。
classmethod 最常见的用途是定义备选构造方法.
2.
不是必须要使用的,因为它就是一个与模块无关的普通函数,而这个方法的功能紧密相关,因此就想把它放在近处。但其实放在同一模块中的类前面或后面定义函数也可以。
如下图,注意这个方法的交互式输出,这说明它的确是一个普通的函数。
1. 怎样将自定义的类的实例变为可散列的?
2. 定义 int 和 float 方法作用?
1.
实现__hash__
和 __eq__
实现__hash__
这个应该返回一个整数,根据特殊方法 __hash__
的文档,最好使用位运算符异或( ^ )混合各分量的散列值
除此之外,应该让实现__eq__
方法,让相等的对象应该具有相同的散列值。
2.
分别被 int() 和float() 构造函数调用),以便在某些情况下用于强制转换类型。
1. 设置私有属性作用?
2. 都知道python其实不存在私有属性(这里我指的是前面两个下划线),是因为它是给原属性改了什么名?
1.
可从两个角度来看待
对创建实例的那个类而言,这样可以不让信息泄露出去。
对于它的子类而言,这避免了父类实例被覆盖掉。
1. slots 类属性解决了什么问题,它是通过什么方式解决的?
2. 众所周知属性能被继承故有了前文的私有属性,那__slots__ 类属性能否被继承?
3. __slots__副作用?
1. 可以通过修改实例来修改类属性吗?
1.
不可以,只能在类上修改。