因此,当执行 print 语句时,__str__ 将会被执行。
__cmp__
如果想要提供自定义逻辑来比较同一实例的两个对象,可以使用__cmp__ 实例函数。
__cmp__ 函数返回1 (更大), - 1 (更低) 和0 (相等),以指示两个对象的大小。
可以将 __cmp__ 想象成其他编程语言中的 Equals() 方法。
Overloading
通过将更多参数作为实例,来重载一个对象。
还可以通过为 __add__ 来实现想要的运算符,如 +。
对象的浅拷贝 (Shallow Copy) 和深拷贝 (Deep Copy)
等效对象 – 包含相同的值
相同对象 – 引用相同的对象 – 内存中指向相同的地址
如果要复制整个对象,可以使用复制模块 (copy module),如下所示。
这将导致浅拷贝,因为属性的引用指针将会被复制。
如果对象的一个属性是对象引用,那么它将简单地指向与原始对象相同的引用地址。
更新源对象中的属性将导致目标对象中的属性也会更新。
浅拷贝是复制引用指针。
这种情况下可以利用深拷贝,如下所示。
如果 MyClass 包含引用 MyOtherClass 对象的属性,则属性的内容将通过 deepcopy 复制到新创建的对象中。
深拷贝将对对象进行新的引用。
18、面向对象设计——继承Python支持对象的继承,即对象可以继承其父类的功能和属性。
继承的类可以在其函数中包含不同的逻辑。
如果一个父类 ParentClass 有两个子类 SubClass1 和 SubClass2,那么你可以使用Python来创建类,如下所示。
上例中两个子类都将包含 my_function() 函数
类的继承属性鼓励代码的重用性和可维护性。
此外,python 中支持多类继承,这与 C# 语言不同。
多类继承 multi-Inheritance
如果你想调用父类函数,可以这样:
19、垃圾收集——内存管理Python 中的所有对象都存储在一个堆积空间 (heap space),而 Python 解释器可以访问此空间。
Python 有一个内置的垃圾收集机制。
这意味着 Python 可以自动为程序进行分配和取消内存,这与 C++ 或 C# 等其他语言类似。
垃圾收集机制主要是清除程序中未引用/使用的那些对象的内存空间。
由于多个对象可以共享内存引用,因此 python 使用两种机制:
引用计数:计算引用对象的数目。如果对象的计数为0,则取消对象的空间分配。
循环引用:这种机制关注的是循环引用:当取消分配 (deallocation) 的数目大于阈值时,仅取消对象所在的内存空间分配。
在 Python 中新创建的对象,可以通过如下方式进行检查: