python私有函数实现_024孤荷凌寒自学python第二十四天python类中隐藏的私有方法探秘...

(完整学习过程屏幕记录视频地址在文末,手写笔记在文末)

今天发现了python的类中隐藏着一些特殊的私有方法。

这些私有方法不管我们定义类时是否在类的内部代码块中定义过它们,这些私有方法都是存在的。比如已经知道的 __init__ 方法就是其中一个。

一、__str__

此方法将输出在本身的相关信息文本。

测试:

class ghlh(object):

name='孤荷凌寒'

qq='578652607'

newghlh=ghlh()

strTemp=newghlh.__str__()

print(strTemp)

运行结果 :

当然同 __init__ 方法一样,我们可以自己重新覆盖 书写 此方法的代码:

class ghlh(object):

name='孤荷凌寒'

qq='578652607'

def __str__(self):

return self.name

newghlh=ghlh()

strTemp=newghlh.__str__()

print(strTemp)

现在的运行结果:

孤荷凌寒

二、__iter__

通过类的此方法,可以使一个类的实例化对象变成一个迭代器。

但是此方法必须配合显式定义过的:

__next__

方法同时使用才有实际功用。

测试如下:

class ghlh(object):

name='孤荷凌寒'

qq='578652607'

a=0

b=1

def __str__(self):

return self.name

def __init__(self,a=0,b=1):

self.a=a

self.b=b

def __iter__(self):

return self #通过此语句,使类的实例化对象成为一个迭代器,可以在被 循环语句 读取时,每次返回自身中 __next__ 方法的下一对象值

def __next__(self):

self.a,self.b=self.b,self.a+self.b #每次被访问本迭代器时,都返回当前a,b的下一个值,b=上一个a+上一个b

if self.a>10000: #加个条件,使本 迭代器 成为一个有限元素的 迭代器,否则将无穷下去。

raise StopIteration #当达到条件时,通过raise返回一个迭代元素结束的错误来使本 迭代器 的元素是有限的。

return self.a  #每次被 访问 本迭代器时,将a的值返回给调用的 循环语句

newghlh=ghlh()

#strTemp=newghlh.__str__()

#print(strTemp)

#因为我们已经在类中定义了 __iter__ 方法 和 __next__ 方法,现在类的实例化对象 newghlh 已经成为了一个迭代器,可以在循环体中直接使用了。

for n in newghlh:

print(n)

运行结果 :

1

1

2

3

5

8

13

21

34

55

89

144

233

377

610

987

1597

2584

4181

6765

三、 __getitem__

通过显式地编写好此私有方法的代码,可以实现将类实例化后的对象当作列表来使用的效果。

测试:

class ghlh(object):

name='孤荷凌寒'

qq='578652607'

a=0

b=1

def __str__(self):

return self.name

def __init__(self,a=0,b=1):

self.a=a

self.b=b

def __iter__(self):

return self #通过此语句,使类的实例化对象成为一个迭代器,可以在被 循环语句 读取时,每次返回自身中 __next__ 方法的下对象值

def __next__(self):

self.a,self.b=self.b,self.a+self.b #每次被访问本迭代器时,都返回当前a,b的下一个值,b=上一个a+上一个b

if self.a>10000: #加个条件,使本 迭代器 成为一个有限元素的 迭代器,否则将无穷下去。

raise StopIteration #当达到条件时,通过raise返回一个迭代元素结束的错误来使本 迭代器 的元素是有限的。

return self.a  #每次被 访问 本迭代器时,将a的值返回给调用的 循环语句

def __getitem__(self,n):

for x in range(n):   #将a的值变化 n 次(最大次数),然后就相当于建立 了一个 内部元素 总数为 n 个的列表

self.a,self.b=self.b,self.a+self.b

return self.a

newghlh=ghlh()

#strTemp=newghlh.__str__()

#print(strTemp)

#因为我们已经在类中定义了 __iter__ 方法 和 __next__ 方法,现在类的实例化对象 newghlh 已经成为了一个迭代器,可以在循环体中直接使用了。

#for n in newghlh:

#    print(n)

intNew=newghlh[3] #现在对于 ghlh 类实例化的 对象 newghlh 可以像使用 列表一样访问其元素了。

print(intNew)

运行结果 :

2

四、__getattr__

通过此内部方法来获取类实例化后的对象中的对象时,就算要获取 的对象根本不存在,也不会抛出错误。

五、__call__

通过显式地编写此私有方法的代码,主要是给此方法函数添加形式参数(也可以不添加形式参数),并让函数内部代码块执行一定的操作。

那么只要在类的内部代码块中显式地重定义了此方法函数,就可以将 此 类 实例化后的对象名 当作一个函数名称来使用,当调用这个“函数”时,实则上是执行了类代码中的私有方法:

__call__

测试:

class ghlh(object):

name='孤荷凌寒'

qq='578652607'

a=0

b=1

def __str__(self):

return self.name

def __init__(self,a=0,b=1):

self.a=a

self.b=b

def __iter__(self):

return self #通过此语句,使类的实例化对象成为一个迭代器,可以在被 循环语句 读取时,每次返回自身中 __next__ 方法的下对象值

def __next__(self):

self.a,self.b=self.b,self.a+self.b #每次被访问本迭代器时,都返回当前a,b的下一个值,b=上一个a+上一个b

if self.a>10000: #加个条件,使本 迭代器 成为一个有限元素的 迭代器,否则将无穷下去。

raise StopIteration #当达到条件时,通过raise返回一个迭代元素结束的错误来使本 迭代器 的元素是有限的。

return self.a  #每次被 访问 本迭代器时,将a的值返回给调用的 循环语句

def __getitem__(self,n):

for x in range(n):   #将a的值变化 n 次(最大次数),然后就相当于建立 了一个 内部元素 总数为 n 个的列表

self.a,self.b=self.b,self.a+self.b

return self.a

def __call__(self,strMsg):

print('这是在类内部代码块中声明的一个方法:收到的形式参数对应的实参的值是:“' + strMsg + '”')

newghlh=ghlh()

#strTemp=newghlh.__str__()

#print(strTemp)

#因为我们已经在类中定义了 __iter__ 方法 和 __next__ 方法,现在类的实例化对象 newghlh 已经成为了一个迭代器,可以在循环体中直接使用了。

#for n in newghlh:

#    print(n)

#intNew=newghlh[3] #现在对于 ghlh 类实例化的 对象 newghlh 可以像使用 列表一样访问其元素了。

#print(intNew)

newghlh('将类的实例化后的对象当作了函数来使用,这是传递的实际参数') #现在可以像调用函数一样调用这个类的实例化对象名称

运行结果:

这是在类内部代码块中声明的一个方法:收到的形式参数对应的实参的值是:“将类的实例化后的对象当作了函数来使用,这是传递的实际参数”

我的qq号:578652607 微信: dalingshu

就是要学社群www.941xue.com/index.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值