9-python中的一些内置方法和属性

1. __init__方法(初始化)

  • 当使用 类名() 创建对象时,会 自动 执行以下操作:

    1. 为对象在内存中 分配空间 —— 创建对象

    2. 为对象的属性 设置初始值 —— 初始化方法(init)

  • 这个 初始化方法 就是 __init__ 方法,__init__ 是对象的内置方法,创建对象时会被自动调用。

__init__ 方法是 专门 用来定义一个类 具有哪些属性的方法

在初始化方法内部定义属性

在开发中,如果希望在 创建对象的同时,就设置对象的属性,可以对 __init__ 方法进行 改造

  1. 把希望设置的属性值,定义为 __init__ 方法的参数

  2. 在方法内部使用 self.属性 = 形参 接收外部传递的参数

  3. 在创建对象时,使用 类名(属性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__ 方法必须返回一个字符串

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值