1. __init__方法(初始化)
-
当使用
类名()
创建对象时,会 自动 执行以下操作:-
为对象在内存中 分配空间 —— 创建对象
-
为对象的属性 设置初始值 —— 初始化方法(
init
)
-
-
这个 初始化方法 就是
__init__
方法,__init__
是对象的内置方法,创建对象时会被自动调用。
__init__
方法是 专门 用来定义一个类 具有哪些属性的方法!
在初始化方法内部定义属性
在开发中,如果希望在 创建对象的同时,就设置对象的属性,可以对 __init__
方法进行 改造
-
把希望设置的属性值,定义为
__init__
方法的参数 -
在方法内部使用
self.属性 = 形参
接收外部传递的参数 -
在创建对象时,使用
类名(属性1, 属性2...)
调用
class Cat():
def __init__(self, new_name):
print("这是一个初始化方法")
# self.属性名 = 属性的初始值
# self.name = "Tom"
self.name = new_name
tom = Cat("Tom")
lazy_cat = Cat("大懒猫")
2. __new__方法
- __new__方法接受的参数虽然也是和__init__一样,但__init__是在类实例创建之后调用,而 __new__方法正是创建这个类实例的方法。
- __new__通常用于控制生成一个新实例的过程。决定了是否使用该类的__init__方法,因为__new__可以调用其他类的构造方法或者直接返回别的类创建的对象来作为本类的实例。
- 新式类开始实例化时,__new__方法会返回cls的实例,然后调用该类的__init__方法进行初始化,该方法接收这个实例(即self)作为初始化的第一个参数,然后一次传入__new__方法中接收的位置参数和命名参数。但是,若__new__没有返回cls(即当前类)的实例,那么当前类的__init__方法是不会被调用的。
class Cat():
def __new__(cls, new_name):
print('__new__ called')
return super(Cat, cls).__new__(cls, new_name)
def __init__(self, new_name):
print("这是一个初始化方法")
# self.属性名 = 属性的初始值
# self.name = "Tom"
self.name = new_name
tom = Cat("Tom")
lazy_cat = Cat("大懒猫")
__init__ 和 __new__ 最主要的区别在于
- 创建一个新实例时用__new__,初始化一个实例用__init__;
- __new__是一个静态方法,__init__是一个实例方法;
- __new__方法的调用是发生在__init__之前的;
- __new__方法会返回一个创建的实例,而__init__什么都不返回;
- 只有__new__方法返回一个cls的实例后,后面的__init__方法才能被调用。
3.__del__
方法(知道)
在 Python
中
-
当使用
类名()
创建对象时,为对象 分配完空间后,自动 调用__init__
方法 -
当一个 对象被从内存中销毁 前,会 自动 调用
__del__
方法
应用场景
-
__init__
改造初始化方法,可以让创建对象更加灵活 -
__del__
如果希望在对象被销毁前,再做一些事情,可以考虑一下__del__
方法
生命周期
-
一个对象从调用
类名()
创建,生命周期开始 -
一个对象的
__del__
方法一旦被调用,生命周期结束 -
在对象的生命周期内,可以访问对象属性,或者让对象调用方法
3. __str__
方法
在 Python
中,使用 print
输出 对象变量,默认情况下,会输出这个变量 引用的对象 是 由哪一个类创建的对象,以及 在内存中的地址(十六进制表示)
如果在开发中,希望使用 print
输出 对象变量 时,能够打印 自定义的内容,就可以利用 __str__
这个内置方法了
注意:
__str__
方法必须返回一个字符串