两点水
This commit is contained in:
@@ -22,6 +22,6 @@ if __name__ == '__main__':
|
||||
|
||||
输出的结果:
|
||||
|
||||

|
||||

|
||||
|
||||
可以看到,一个类的魔术方法还是挺多的,截图也没有截全,不过我们只需要了解一些常见和常用的魔术方法就好了。
|
||||
|
||||
@@ -16,7 +16,7 @@ user=User('两点水',23)
|
||||
|
||||
实际上,创建一个类的过程是分为两步的,一步是创建类的对象,还有一步就是对类进行初始化。`__new__` 是用来创建类并返回这个类的实例, 而`__init__` 只是将传入的参数来初始化该实例.`__new__` 在创建一个实例的过程中必定会被调用,但 `__init__` 就不一定,比如通过pickle.load 的方式反序列化一个实例时就不会调用 `__init__` 方法。
|
||||
|
||||

|
||||

|
||||
|
||||
`def __new__(cls)` 是在 `def __init__(self)` 方法之前调用的,作用是返回一个实例对象。还有一点需要注意的是:`__new__` 方法总是需要返回该类的一个实例,而 `__init__` 不能返回除了 `None` 的任何值
|
||||
|
||||
@@ -56,4 +56,4 @@ if __name__ == '__main__':
|
||||
|
||||
其实在实际开发中,很少会用到 `__new__` 方法,除非你希望能够控制类的创建。通常讲到 `__new__` ,都是牵扯到 `metaclass`(元类)的。
|
||||
|
||||
当然当一个对象的生命周期结束的时候,析构函数 `__del__` 方法会被调用。但是这个方法是 Python 自己对对象进行垃圾回收的。
|
||||
当然当一个对象的生命周期结束的时候,析构函数 `__del__` 方法会被调用。但是这个方法是 Python 自己对对象进行垃圾回收的。
|
||||
|
||||
@@ -68,22 +68,22 @@ if __name__ == '__main__':
|
||||
|
||||
```txt
|
||||
__eq__
|
||||
num1 == num2 ? --------> False
|
||||
num1 == num2 ? --------> False
|
||||
|
||||
__eq__
|
||||
num1 != num2 ? --------> False
|
||||
num1 != num2 ? --------> False
|
||||
|
||||
__lt__
|
||||
num1 < num2 ? --------> True
|
||||
num1 < num2 ? --------> True
|
||||
|
||||
__gt__
|
||||
num1 > num2 ? --------> False
|
||||
num1 > num2 ? --------> False
|
||||
|
||||
__le__
|
||||
num1 <= num2 ? --------> True
|
||||
num1 <= num2 ? --------> True
|
||||
|
||||
__ge__
|
||||
num1 >= num2 ? --------> False
|
||||
num1 >= num2 ? --------> False
|
||||
|
||||
```
|
||||
|
||||
@@ -109,4 +109,4 @@ num1 >= num2 ? --------> False
|
||||
|
||||
最后,如果对本文感兴趣的,可以关注下公众号:
|
||||
|
||||

|
||||

|
||||
|
||||
@@ -4,4 +4,4 @@
|
||||
|
||||
# 目录 #
|
||||
|
||||

|
||||

|
||||
|
||||
Reference in New Issue
Block a user