ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2021-07-22十二.析构函数__del___方法和__cal__方法及方法没有重载

2021-07-23 11:01:41  阅读:170  来源: 互联网

标签:__ play 22 私有 self 方法 属性


目录

一、析构方法__del __

二、__call__方法和可调用对象

三.方法无重载

四.方法的动态性:

五. 私有属性和私有方法(实现封装)

总结        Python一切皆对象


一、析构方法__del __

        del方法用于实现对象销毁所需的操作,比如释放对象占用的资源,打开网络连接等,

        Python实现自动的垃圾回收机制,当对象没有被引用时(引用计数为),由垃圾回收器调用__del __()方法,系统会自动提供__del__方法,一般不用自定义析构方法,我们也可以通过del语句删除对象,该方法确保调用该方法

二、__call__方法和可调用对象

        定义了__call__()方法的的对象成为可调用对象,即该对象可像函数一样被调用

三.方法无重载

        其他语言中可定义多个重名方法,只要方法签名一致即刻(方法签名包含:方法名,参数数量,参数类型)

        而Python中参数没有声明类型,参数数量也确定(可以由可变参数控制),因此Python是没有方法重载的,但定义一个方法即可有多个调用方式,也就相当于实现了方法的重载

如果定义了多个同名方法,只有最后一个有效(不建议重名)

四.方法的动态性:

我们可以为类添加新的方法,或动态的修改类的已有方法

class person:
	def work(self):
		print("啊这是一个方法")

		
def play_game(self):
        print("我爱摸鱼")

	
def work2(self):
        print("啊,那个方法摸鱼去了")


#—————————————————————————————结果————————————————————————————————————————————

>>> 
#========================== RESTART: D:/Pwork/ff.py ==========================
>>> p=person()
>>> p.work()#类内方法可以调用
啊这是一个方法
>>> p.play_game()#非类内方法不可以调用
Traceback (most recent call last):
  File "<pyshell#36>", line 1, in <module>
    p.play_game()
AttributeError: 'person' object has no attribute 'play_game'
>>> p.work2()#非类内方法不可以调用
Traceback (most recent call last):
  File "<pyshell#37>", line 1, in <module>
    p.work2()
AttributeError: 'person' object has no attribute 'work2'
>>> p.play=play_game#将play_game添加到类
>>> p.play(1)#可以运行,无参数会报错,例子如下work
我爱摸鱼


#———————————————————————————————————————————————————————————————————————————————
>>> p.work=work2
>>> p.work()#无参数报错
Traceback (most recent call last):
  File "<pyshell#45>", line 1, in <module>
    p.work()
TypeError: work2() missing 1 required positional argument: 'self'
>>> p.work(1)#新方法替换了work
啊,那个方法摸鱼去了
>>> 

五. 私有属性和私有方法(实现封装)

        Python对于类成员没有严格的访问限制,私有属性和私有方法有如下要点:

  •  约定双下划线开头,属性为私有(private),其他为公共的
  •  类内部可以直接访问私有方法(属性)
  • 类外部不可以直接访问私有方法(属性)
  • 类外部可以通过“_(单下划线)类名__(双下划线)私有属性(方法)名”访问私有属性(方法)

        方法本质上也是属性!只不过是可以通过()执行而已。所以,此处讲的私有属性和公
有属性,也同时讲解了私有方法和公有方法的用法

例子

class person:
    __name="没有名字"#私有类属性  dir可以查到
    ame="名字"
    def __init__(self,age,fish):
            self.__age=age#类私有实例属性
            self.fish=fish
    def work(self):#公共实例方法
            
            print(f"啊这是一个方法,它{self.__age}岁,它叫",person.__name)#类内部可以直接访问私有属性
    def __play(self):#私有实例方法
            print(str(self.__age)+"岁的我爱摸的",self.fish,"但摸不着")
	


>>> 
#========================== RESTART: D:/Pwork/ff.py ==========================
>>> p=person(12,"我不是鱼")
>>> p.work()#类内部可以直接访问私有属性
啊这是一个方法,它12岁,它叫 没有名字
>>> p.ame#可以直接访问公共属性
'名字'
>>> p.__name#不可以直接访问私有属性
Traceback (most recent call last):
  File "<pyshell#73>", line 1, in <module>
    p.__name
AttributeError: 'person' object has no attribute '__name'
>>> 
#——————————————————————————外部调用私有方法———————————————————————————————————————————
>>> p._person__play()#不可以直接访问私有方法
12岁的我爱摸的 我不是鱼 但摸不着
>>> p.__play()#不可以直接访问私有方法
Traceback (most recent call last):
  File "<pyshell#128>", line 1, in <module>
    p.__play()
AttributeError: 'person' object has no attribute '__play'
>>> 


  


总结        Python一切皆对象

备忘链接:python调用私有属性的方法总结 - 云+社区 - 腾讯云 (tencent.com)

                Python类的私有属性与私有方法的使用_巨基的博客-CSDN博客_python类私有方法

标签:__,play,22,私有,self,方法,属性
来源: https://blog.csdn.net/zbz1873556850/article/details/118994830

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有