Python开发(人工智能/大数据/机器学习)Python查漏补缺

【查漏补缺】Python面向对象61~80

2019-03-02  本文已影响34人  TensorFlow开发者

61.对象的__str__方法,默认下会返回:创建该对象的类名,以及当前对象在内存中的地址(16进制的)。

62.如果我们需要定制打印对象变量时的默认打印信息,就可以重新实现__str__方法。特别注意:该__str__方法内部必须返回一个字符串才行,否则报错!

63.Python能够自动地将一对括号()中的代码连接在一起,即使开发过程中为了代码美观而强制换行,也是一起的。

64.尽管Python支持,但不推荐在类的外部又给该类的对象临时添加属性。

65.在类的__init__方法中,如果想让该类的对象有某些属性,但又不知此时该属性的初始值,则可以赋值None。None关键字表示什么也没有,是一个空对象,是一个特殊的常量。可以将None赋值给任意一个变量。

66.运算符is,用来判断两个变量所指向的内存地址是否相同。例如:a is b,即:a是b吗?也即:a和b指向的内存地址是一样的吗?

运算符==,判断的是两个变量所指向内存地址中,存储的数据是否相同。c==d,即:c,d所指向内存地址中,存储的数据是否相等。

67.针对None的比较,尽管用==判断运行效果没有区别,Python是建议使用is判断的。

68.私有属性或私有方法:在定义私有属性或私有方法时,只需要在属性名或方法名前增加两个下划线__,就定义好了,这样在类的外界和子类就无法直接访问该类私有属性或私有方法了。

如果类的外界硬要访问私有属性或私有方法,则会报错。

69.在Python中,并没有真正意义的私有。

70.Python中,解释器针对私有属性或私有方法的名称是做了一些特殊处理,使得外界无法访问到。处理方式即:在名称前加上了:_类名。所以私有属性或私有方法的完整名称是:_类名+私有属性或私有方法名。_类名__名称。

尽管能访问了,但既然是私有的,就不推荐这么访问。

71.子类是不能直接访问父类中的私有属性和私有方法。子类可以通过父类提供的公有的方法来间接访问父类的私有属性和私有方法。

72.Python中的MRO(方法搜索顺序):类中有一个内置属性__mro__,返回一个元组,在该元组中就可以看到方法搜索顺序。

MRO主要用于在多继承时判断方法、属性的调用查找顺序。如果查到,就不再继续查找,而是直接调用。

73.Python3中,默认所有类都是继承自object类的。

Python2.x中,如果没有指明父类,则是不会有默认父类object的。

74.每个对象都有自己独立的内存空间,保存着该对象的属性。

75.同一个类多个对象的同一方法,在内存中只有一份。在调用方法时,需要把对象的引用传到方法内部。

76.类是一个个特殊的对象,类对象。在程序运行时,类也是要加载到内存中的。类中定义的对象方法,正是保存到类内存中了。在程序运行时,类对象在内存中只有一份。

77.类中,除了可以封装实例属性和实例方法,还可以封装类属性和类方法。

78.实例属性通常都是是在__init__中设计的,类属性直接在类中方法外设计。

79.obj.xxx获取属性值,先在对象内部查找对象属性,查找不到再去类属性中查找。

80.obj.xxx=yyy为属性赋值,只会为对象添加一个属性xxx,而不会影响到类属性xxx的值。这是一个要特别注意的坑!

上一篇下一篇

猜你喜欢

热点阅读