python面向对象<二>
私有方法:
应用场景
- 在实际开发中,对象的某些属性或方法可能只希望在对象的内部被使用,而不希望在外部被访问到
- 私有属性:就是对象不希望公开的属性
- 私有方法:就是对象不希望公开的方法
Python默认的成员函数和成员变量都是公开的,Python 私有属性和方法没有类似别的语言的public,private等关键词来修饰。
在python中定义私有变量只需要在变量名或函数名前加上 "__"两个下划线,那么这个函数或变量就会为私有的了。
声明该方法为私有方法,不能在类的外部调用
class Send(object): # 私有方法 def __send_msg(self): print('-------正在发送短信--------') # 公有方法 def send_msg(self,money): if money >10000: self.__send_msg() else: print('余额不足,请充值,再发送短信') #私有方法:在方法面前加上两个'_' dog = Send() dog.send_msg(10000) >>> 余额不足,请充值,再发送短信 dog = Dog() dog.send_msg(10000000) >>> -------正在发送短信--------
__del__方法和测量引用计数:
class Dog(object): def __del__(self): #当该对象在临死之前的操作 print('------英雄over------') dog1 = Dog() dog2 = dog1 del dog1
# 仅仅删除dog1指向Dog(),dog2依旧指向Dog()
# 不会调用__del__方法,因为这个对象还有其他变量指向它(dog2),即 引用计数不是0
# 如果在程序结束时,有些对像还存在,那么python解释器会自动调用他们的__del__方法来完成清理工作
dog1 = Dog() dog2 = dog1 del dog1 #不会调用__del__方法,因为这个对象还有其他变量指向它(dog2),即 引用计数不是0 del dog2 #此时会调用__del__方法,因为没有变量指向它 print('===============') >>> ------over------ >>> =============== #如果在程序结束时,有些对像还存在,那么python解释器会自动调用他们的__del__方法来完成清理工作
测量引用计数的方法:
import sys class Dog(object): def __del__(self): print('------over------') dog1 = Dog() dog2 = dog1 del dog1 res = sys.getrefcount(dog2)(得到的引用次数=目标次数-1) print(res) >>> 2 >>> ------over------
私有方法、私有属性在继承中的表现:
class A: def __init__(self): self.num1 = 100 #公有属性 self.__num2 = 200 #私有属性 def test1(self): #公有方法 print('----test1----') def __test2(self): #私有方法 print('----test2----') def test3(self): self.__test2() print(self.__num2) class B(A): def test4(self): self.__test2() print(self.__num2) b= B() # b.test1() # b.__test2() #私有方法不会被继承下来 # print(b.num1) #继承公有属性 # print(b.__num2) #不会继承公有属性 b.test3() #如果在父类中调用私有属性和私有方法,可以调用私有属性和私有方法 b.test4() #如果从父类中调用私有属性和私有方法,不可以调用私有属性和私有方法
总结:
1. 如果调用的是继承父类中的公有方法
2. 可以在这个公有方法中访问父类的私有属性和私有方法
3. 但是如果在子类中实现一个公有方法,那么这个方法是不能
4. 调用继承父类中的私有方法和私有属性
作者:无荨
-------------------------------------------
个性签名:学IT,就要做到‘活到老学到老’!
如果觉得这篇文章对你有小小的帮助的话,别忘记点个“推荐”哦!