网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
07月31日漏签0天
开课吧python吧 关注:364贴子:4,064
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 1 2 下一页 尾页
  • 22回复贴,共2页
  • ,跳到 页  
<<返回开课吧python吧
>0< 加载中...

【开课吧python】16个python常用魔法函数

  • 只看楼主
  • 收藏

  • 回复
  • 语子易
  • 知名人士
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
1、__ init__():
所有类的超类object,有一个默认包含pass的__ init __()实现,这个函数会在对象初始化的时候调用,我们可以选择实现,也可以选择不实现,一般建议是实现的,不实现对象属性就不会被初始化,虽然我们仍然可以对其进行赋值,但是它已经成了隐式的了,编程时显示远比隐式的更好,看下面的小栗子:


  • 语子易
  • 知名人士
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我们可以通过vars函数获知显示声明的属性,但是隐式的就无法获知了,这并不值得提倡,但是在知道参数的情况下我们还是可以对其进行赋值的,如下:

不论怎么样,显示的初始化属性是一个好习惯。


2025-07-31 21:14:54
广告
不感兴趣
开通SVIP免广告
  • 语子易
  • 知名人士
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
2、__ str__():
直接打印对象的实现方法,__ str__是被print函数调用的,一般都是return一个什么东西,这个东西应该是以字符串的形式表现的。如果不是要用str()函数转换,我们可以直接print的对象都是实现了__ str__这个方法的,比如dict。看下面的例子。


  • 语子易
  • 知名人士
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
__ str__是dict其中的一个方法,这个方法的实现赋予了它直接被print的能力,知道这些,我们就可以给自己的类定义这个方法使其可以print了,例子如下:


  • 语子易
  • 知名人士
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
但是这个函数返回值必须为string,否则会抛异常:


  • 语子易
  • 知名人士
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
3、__ new__():
在object类中存在一个静态的__ new__(cls, *args, **kwargs)方法,该方法需要传递一个参数cls,cls表示需要实例化的类,此参数在实例化时由Python解释器自动提供,__ new__方法必须有返回值,且返回的是被实例化的实例,只有在该实例返回后才会调用__ init__来进行初始化,初始化所用的实例就是__ new__返回的结果,也就可以认为是self,我们来看下面的例子:


  • 语子易
  • 知名人士
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
可以看到,在实例化时候,先执行__ new__再执行__ init__,而且python会自动传入我们希望实例化的类,的这里我们显示的调用了object的__ new__,也可以调用其他的父类的__ new__,那么如果我们定义了__ new__,但是并没有返回一个本身实例,会发生什么事呢?例子如下:


  • 语子易
  • 知名人士
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
可以看到本身的__ init__函数并未被调用,而是调用了str的__ init__,可能这样并不直观,那么换一个实例返回,如下:

这个就比较明显了,另一个实例的__ init__被调用了。


2025-07-31 21:08:54
广告
不感兴趣
开通SVIP免广告
  • 语子易
  • 知名人士
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
4、__ unicode__():
__ unicode__()方法是在一个对象上调用unicode()时被调用的。因为Django的数据库后端会返回Unicode字符串给model属性,所以我们通常会给自己的model写一个__ unicode__()方法。如果定义了__ unicode__()方法但是没有定义__ str__()方法,Django会自动提供一个__ str__()方法调用 __ unicode__()方法,然后把结果转换为UTF-8编码的字符串对象,所以在一般情况下,只定义__ unicode__()方法,让 Django来处理字符串对象的转换,看一个小栗子:


  • 语子易
  • 知名人士
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

在django中,虽然没有定义__ str__,但是django会将__ unicode__转为了str,当然你调用unicode更加是没有问题的。


  • 语子易
  • 知名人士
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
5、__ call__():
对象通过提供call()方法可以模拟函数的行为,如果一个对象提供了该方法,就可以像函数一样使用它,还是用例子进行说明。

可以看到,我们在像使用函数一样使用类,实在是很有意思的事。


  • 语子易
  • 知名人士
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
6、__ len__():
len调用后会调用对象的__ len__函数,我们可以为其定制输出,如下例子:


  • 语子易
  • 知名人士
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
但是该函数要求我们返回的值必须为int,否则会报错,如下:


  • 语子易
  • 知名人士
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
7、__ repr__():
函数str() 用于将值转化为适于人阅读的形式,而repr() 转化为供解释器读取的形式,某对象没有适于人阅读的解释形式的话,str() 会返回与repr(),所以print展示的都是str的格式。例子:


2025-07-31 21:02:54
广告
不感兴趣
开通SVIP免广告
  • 语子易
  • 知名人士
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
8、__ setattr__():
该函数可以设置函数的属性,文字不知怎么描述,直接上例子:

从上例可以看出,__ setattr__函数可以支持对象增加属性,我们可以有计划的修改增加属性的内容。


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 1 2 下一页 尾页
  • 22回复贴,共2页
  • ,跳到 页  
<<返回开课吧python吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示