python魔法属性魔法方法_Python | 魔法属性 | 魔法方法

前言

在python中,以前后各有两个下划线的这种方式命名的标识符,称为魔法属性,或魔法方法,这些魔法属性或魔法方法,是python中内置的,预先定义好一些功能的属性或方法。接下来就分别介绍它们。

init 方法的基本使用与代码解析

init 方法的作用是为对象进行初始化 initialization,该方法会在创建对象时,自动调用

一般会将对象所具有的属性放到这个方法中,进行初始化,不在使用动态绑定为对象添加属性

使用方法: self.属性名 = 值 的方式添加属性

'''

通过 __init__ 方法来为对象进行初始化

'''

# 定义一个学生类

class Student(object):

# 实现 __init__ 方法

def __init__(self):

print('Init Run ...')

# 添加属性

self.name = 'tom'

self.age = 12

tom = Student()

print(tom.name)

print(tom.age)

jack = Student()

# 对属性的修改

jack.name = 'Jack'

print(jack.name)

print(jack.age)

结果如下:

Init Run ...

tom

12

Init Run ...

Jack

12

问题?

在类的方法里定义属性的固定值,则每隔对象实例变量的属性值都是相同的,有什么办法可以让实例的每个对象都有不同的属性值?

带参数的init方法使用与代码解析

通过一个类,可以创建多个对象,就好比 通过一个模具创建多个实体一样

init(selt)中,默认只有一个参数,如果在创建对象时传递了2个实参,那么init(selt)中出现了self作为第一个形参外,还需要2个形参,例如:init(selt,x,y) 代码解析如下:

'''

通过 init 方法,传入相应的参数,利用这些参数为对象的属性进行初始化

'''

class Student(object):

# 实现 带参数的init方法

def __init__(self, new_name,new_age):

# 添加 属性

self.name = new_name

self.age = new_age

print(f'{self.name} Init Run')

# 实例一个对象

tom = Student('tom',12)

print(tom.name)

print(tom.age)

jack = Student('Jack',22)

print(jack.name)

print(jack.age)

结果如下:

tom Init Run

tom

12

Jack Init Run

Jack

22

str 使用方法及代码解析

当使用print输出对象时,默认打印对象的内存地址。如果类定义了str(self)方法,那么就会打印从这个方法中return的数据

str方法通常返回一个字符串,作为这个对象的描述信息 代码解析如下:

class Cat(object):

def __init__(self, name, age):

self.name = name

self.age = age

# 实现__str__ 方法

# 该 方法必须 返回一个字符串类型的数据

def __str__(self):

# return f'[姓名:{self.name} 年龄:{self.age}]'

# return f'{"name":{self.name}, "age":{self.age}}' # 因为{}的原因,所以不行

# return '{name:%s, age: %d}' %(self.name,self.age)

return '{' + f'name:{self.name}, age:{self.age}' + '}'

tom = Cat('Tom', 1)

print(tom)

jack = Cat('Jack',2)

print(jack)

#调用str方法,把对象tom传入,得到的结果一样

stu_string = str(tom)

结果如下:

{name:Tom, age:1}

{name:Jack, age:2}

#调用方法后的结果,和上面结果一样

{name:Tom, age:1}

{name:Jack, age:2}

del方法使用及代码解析

当删除对象后,python解释器也会默认调用一个方法,就是del()

当有变量保存了一个对象的引用时,此对象的引用计数就会加1

当使用del()删除变量指向的对象时,则会减少对象的引用计数。如果对象的引用计数不为1,那么会让这个对象的引用计数减1,当对象的引用计数为0时,则对象才会被真正的删除(内存被回收)。

'''

__del__方法

用来在销毁对象时自动 调用 该 方法

'''

class Cat(object):

def __init__(self):

self.childs = ['tom1','tom2','tom2']

def __del__(self):

# 在销毁当前对象之前,将自己管理的属性对象先销毁,回收资源

# del self.childs

print('Del Run ...')

tom = Cat()

# del tom

tom.childs

print('over')

结果如下:

over

Del Run ...

改变del方法代码后:

def __del__(self):

# 在销毁当前对象之前,将自己管理的属性对象先销毁,回收资源

del self.childs

print('Del Run ...')

tom = Cat()

del tom

tom.childs

print('over')

删除之后结果如下:

Traceback (most recent call last):

NameError: name 'tom' is not defined

Del Run ...

作者:CarryLili

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值