(总结)python 3程序开发指南(六)面向对象程序设计

1.在python中每个内置的类、类库以及我们创建的每个类都直接或间接地从最顶层的基类----object类衍生而来。

2.我们可以通过在类中实现__len__、__add__方法来支持len()、add()函数

3.python面向对象编程没有提供的两个功能:第一个是重载,第二个是明确的访问控制,但是我们可以通过在属性名前加以两个下划线引导,python 就会组织无心的访问.

4.python类中所有对象属性(属性以及方法属性)都必须由self进行指定。

5.任何一个类都含有特殊方法__new__属性,一般我们不需要对其进行重写。一般先调用__new__来创建对象,然后调用__init__初始化对象。

6.自定义类的所有实例都是可hash的,但是当我门重新实现__eq__方法后,他就不再可hash,除非你重新实现__hash__方法。

7.自定义类的所有实例都是支持==,这种比较总是返回False

8.如果我们希望避免不适当的比较,可以通过断言实现:assert isinstance(other, Point)

9.__repr__方法返回结果有两种类型:一种可以使用内置的eval()函数进行评估,并生成一个与repr()调用对象的等价的对象;另一种会返回字符串。

10.property()修饰器函数是一个内置函数,至多可以接受4个参数:一个获取者函数,一个设置者函数,一个删除者函数,以及一个docstring。使用@property的效果与仅使用一个参数(获取者函数)效果相同。

11。所有对象都具备python自动提供的某些特殊方法,其中一种方法称为__class__,实际上是对对象类的一个引用.所有类都有一个私有的__name__属性,也是由python自动提供的.

12.提供hash函数时:

 可以这样:

   def __hash__(self):

            return hash(id(self))

id(self)返回对象独一无二的ID值。

 13。注意使用python的staticmethod和classmethod

14.高级取消实现每个不需要的方法的使用

15.注意del语句和pop语句的区别是后者可以在不存在时隐式的调用而不产生错误。

16.pickling可将python对象序列化转换为字节序列或字符串,它处理的可以是组合数据类型,处理方便,但是pickle没有安全机制(没有加密,也没有进行数字签名)

17.copy.copy()被调用时,将首先尝试使用对象的特殊方法__copy__(),如果对象没有提供该方法就再返回执行自己的代码(类似__deepcopy__)

你可能感兴趣的:((总结)python 3程序开发指南(六)面向对象程序设计)