Python学习计划第三天——类的深入了解


活动地址:CSDN21天学习挑战赛

在应用方面,Python比其他编程语言的功能更为丰富,关键在于Python有大量的,魔法方法与魔法属性。

一、魔法方法

Python内置了许多方法,这些方法在执行特定操作时会自动调用,这些方法称为魔法方法或者魔术方法。_init_与_del_也是魔法方法。魔法方法的名称前后有两根下划线,表示这些方法由Python解释器专用。开发者在定义普通方法时,需要避免使用两根下划线来命名。以下为目前最常见的模式方法。

1._new_与_init_

Python中的类有两种,即经典类与新式类。经典类是指直接申明的,不显示从object继承,具体如下所示

class MyClass:

    def_init_(self,val):
        self._val=val

在创建某个类型的实例时,首先会调用_new_方法,_new_方法会返回该类型的实例,并自动调用_init_方法,同时将实例作为self参数传递到_init_方法中。

_new_方法负责创建实例,_init_方法负责初始化实例,如下所示

class FileOperate:

    def_init_(self,path):
        print("执行_init_方法!")
        self._path=path

    def_new_(cls,*args,**kwargs):
        print("执行_new_方法!")
        print("cls:",cls)
        obj=object._new_(cls)
        if isinstance(obj,cls):
            print("obj是cls的实例")

        return obj

file_operate_obj=FileOperate(r"C:\pythonProject\1.txt")

执行结果如下,输出_new_和_init_执行过程

执行_new_方法!
cls:<class'_main_.FileOperate'>
obj是cls的实例
执行_init_方法!

_new_方法还可以选择是否自动调用,如下所示,在_new_方法中不返回cls的实例,就不会自动调用_init_方法了。在第14行,访问实例的_path属性时,就会提示错误。

class FileOperate:

    def_init_(self,path):
        print("执行_init_方法!")
        self._path=path

    def_new_(cls,*args,**kwargs):
        print("执行_new_方法!")
        print("cls:",cls)
        pass

try:
    file_operate_obj=FileOperate(r"C:\pythonProject\1.txt")
    print("_path的值为:",file_operate_obj._path)
except Exception as e:
    print("错误信息:",e)

执行结果如下,输出错误信息。

执行_new_方法!
cls:<class'_main_.FileOperate'>
错误信息:'NoneType'object has no attribute '_path'

2._str_、_repr_与_format_

_str_、_repr_与_format_都是将对象转换成字符串,只是调用场景不同,如下所示。在FileOperate类中,在第6行定义_str_方法,表示将对象以字符串的形式返回,在第9行定义_repr_方法,表示在控制台直接输出对象。在第12行定义_format_方法,表示将对象格式化输出。

class FileOperate:

    def_init_(self,path):
        self._path=path

    def_str_(self):
        return"调用_str_方法!"

    def_repr_(self):
        return"调用_repr_方法!"

    def_format_(self,*args):
        return"调用_format_方法!"
file_operate_obj=FileOperate(r"C:\pythonProject\1.txt")
print("将对象直接打印到屏幕时:")
print(file_operate_obj)

print("\n调用format方法做格式化输出时:")
print("{}".format(file_operate_obj))

将此脚本文件命名为test1.py,在test1.py同一目录下打开Python命令行窗口。在Python的Shell窗口中使用import导入FileOperate对象,就会执行第15行至第20行代码,此时就会自动调用_str_与_format_方法。在窗口中直接输入f对象,就会自动调用_repr_方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

8X_I

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值