析构函数:
删除对象的时候,解释器会默认调用__del__()方法:
class Person:def __init__(self):print("123")def __del__(self):print("delete") p=Person() print("the last")
结果为:
123
the last
delete#正常情况下不会调用__del__(),对象执行结束后,系统会自动调用__del__()
class Person:def __init__(self):print("123")def __del__(self):print("delete") p=Person() del p#语句执行时内存会立即被回收,会调用对象本身的__del__()方法 print("the last")
结果为:
123
delete
the last
__del__()主要表示程序快或者函数已经全部执行结束
封装:
隐藏对象中一些不希望被外部所访问到的属性或者方法:
class Person:name="lihailu" p=Person() print(p.name) Person.name='liming' print(Person.name)
结果为:
lihailu
liming
隐藏属性(私有权限)只允许在类的内部使用,无法通过对象访问
在直属名或者方法名前面加上两个下划线__
class Person:name="lihailu"__age=18#隐藏属性def introduce(self):print(f"{self.name}的年龄是{self.__age}")#在实例方法中访问类属性和隐藏属性 p=Person() print(p.name) #print(p.__age) #隐藏属性实际上是将名字修改为:_类名__属性名 print(p._Person__age) p._Person__age=20#实现隐藏属性修改,一般不使用(不正规) print(p._Person__age)#第一种方法 #第二种方法,在类的内部访问,推荐使用 p.introduce()
私有属性(方法):
xxx:如果是类中定义的,则类可以在任意地方使用
__xxx:双下划线开头,如果定义在类中,无法在外部直接访问,子类不会继承,要访问只能通过间接的方式,另一个py文件中通过from xxx import *导入的时候,无法导入,一般是Python中的魔法方法或属性,都是有特殊含义和功能的,自己不要轻易定义
_xxx:单下划线开头:如果定义在类中,外部可以使用,子类也可以继承,另一个py文件中通过from xxx import *导入的时候,同样无法导入,一般是为了避免与Python关键字冲突而采用的命名方法
class Man:def __play(self):print("play")def funa(self):print("实例方法")#Man.__play(self)#在实例方法中调用私有方法(不推荐,比较繁琐)2self.__play() ma=Man() ma.funa() #ma.__play()#没有这个方法 #ma._Man__play()#1
私有方法:
class Girl:def _buy(self):#私有方法print("buy") girl=Girl() girl._buy()#需要加下划线