Python新姿势:用魔方方法玩转对象

Python中魔法方法(magic method)其实就是那些被双下划线包围的方法,比如__init____str__ 等等。

这些魔法方法添加了魔力,让我们可以在面向对象编程中用更加简洁的代码来操作对象。
本文根据面向对象编程的一些场景来介绍常用的魔法方法

文末领取Python全套最新学习资源

1. 对象构建

为了初始化对象,我们常常在对象中定义一个__init__方法,比如:

class Student(object):
    """
    学生信息
    """
    def __init__(self, name):
        print("[__init__] Student 初始化...")
        self.name = name

# 创建对象
stu = Student("小明")

# 运行结果
[__init__] Student 初始化...

当我们创建对象时,会自动调用魔法方法__init__去初始化属性。

__init__对应的是__del__,它会在对象失效的调用,
我们可以在__del__方法中清理对象Student占用的资源。

class Student(object):
    def __init__(self, name):
        print("[__init__] 初始化 Student...")
        self.name = name

    def __del__(self):
        print("[__del__] 清理 Student...")

def foo():
    print("进入 foo 函数...")
    stu = Student("小明")
    print("离开 foo 函数...")

foo()

# 运行结果
进入 foo 函数...
[__init__] 初始化 Student...
离开 foo 函数...
[__del__] 清理 Student...

进入 foo 函数后创建对象,离开后,自动清理对象。

2. 对象属性访问

python的对象是可以直接访问属性的,但是访问不存在的属性时,会抛出异常。

class Student(object):
    def __init__(self, name):
        print("[__init__] 初始化 Student...")
        self.name = name

stu = Student("小明")
print(stu.name)
print(stu.fullname)

# 运行结果
[__init__] 初始化 Student...
小明

AttributeError: 'Student' object has no attribute 'fullname'

如果不想抛出异常,从而影响程序的其他部分的运行,
这里可以用魔法方法 __getattr__来控制访问了不存在的属性时的行为。
比如,下面的示例中,访问不存在的属性时,返回False,不抛出异常。

class Student(object):
    def __init__(self, name):
        print("[__init__] 初始化 Student...")
        self.name = name

    def __getattr__(self, attr):
        print("[__getattr__] 访问了 Student 不存在的属性 {}".format(attr))
        return
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值