「这是我参与11月更文挑战的第16天,活动详情查看:2021最后一次更文挑战」
类里面的方法
方法就是封装在类里面的一种特殊函数。
例:
class Person:
def sing(self): #方法,在类里面写函数叫做在类里面定义方法。
print("我最帅!") #里面有一个默认值none。 print("我最帅!",none)
wuhan = Person() #定义实例,写类必备。
wuhan.sing() #调用类里面的方法。 格式:实例化对象.方法()
Person.sing(self = '要传入的东西')
复制代码
实例方法 的调用过程和 self:::
(1)self:通常,将默认会传入的那个参数命名为self,用来表示调用这个方法的实例对象本身。
(2)实例方法:方法总是定义在类中,但是却叫“实例方法”,因为它表示该类所有实例所共有的行为。
小知识点:::self指的是实例,谁去使用它,那么它就是谁。
例:
class Person:
def sing(self):
print("老师在唱歌%s"%self.geci)
print(id(self)) #会发现此处的self的id和下面的laoshi的id是一样的
laoshi = Person() #在这个实例中,laoshi使用了self,所以self就是laoshi
print(id(laoshi))
#和函数的传参一样,只是会先传一个自身的实例self
laoshi.geci = "温暖了寂寞"
laoshi.sing()
复制代码
init 双下划线
初始化方法,作用是在实例化的时候,自动调用。(魔法方法)
“初始化”特殊方法:
在Python中有很多以双下划线开头且以双下划线结尾的固定方法,它们会在特定的时机被触发执行。
__init__就是其中之一,它会在实例化之后自动被调用。以完成实例的初始化。
可以在创建对象时,为对象实现一些初始化的操作,提供一些默认值,需要为类定义实例属性的时候才会执行__init__方法。
class Person:
def __init__(self.name):
self.name = name #self.name是实例属性;name是方法。
def sing(self):
print('吴某最帅')
wumou = Person("吴某") # 实例化 自动调用我们的初始化方法,把吴某这个名字给了name
(这句代码意味着 wumou.name = "吴某"(定义一个实例属性) wumou.name相当于self.name,"吴某"相当于给了name)
复制代码
魔法方法:每一个魔法方法都有它特定的功能。
小知识点:
在python中,指向被删除了,就会被回收。
del删除指向,一个变量指向没有了就会被回收。
del调用的就是__init__魔法方法。
例如:列表方法中,del 列表名,再查看这个列表的时候就会报错,因为del把指向删除了。
del 析构,也叫销毁初始化方法(销毁上面的那个),是在这个文件运行完然后触发。(魔法方法)
__del__就是一个析构函数,当使用del删除对象时,会调用它本身的析构函数。提示开发者,对象被销毁了,方便调试,进行一些必要的清理工作
浅显点理解就是:(当实例对象引用数为0的时候就会调用这个魔术方法)
即当类里面使用了del魔法方法的时候,如果使用了del删除,那么就会调用__del__魔法方法;如果没有使用del删除,那么在程序的最后,会自动回收内存地址,就会调用__del__魔法方法。
入门:
class Person:
pass
hansha = Person()
print(hansha) #输出为:hansha这个实例化的对象指向的对象。即为:<__main__.Person object at 0x00000175C3AFC1D0>
del hansha
print(hansha) #输出会报错,因为指向被删除了。即为:NameError: name 'hansha' is not defined
复制代码
稍微升一点级:
python中一个程序执行完了,内存空间就会被回收,回收掉那么指向就没有了。
class Person:
def __del__(self): #相当于重写了python的__del__方法。在列表里使用del删除时调用的是python默认的__del__方法。
print('好好学习')
hansha = Person()
print(11111)
print(22222)
输出为:
11111
22222
好好学习
复制代码
来个对比的例子仔细看看:
当指向删除完了之后会调用__del__魔法方法。
class Person:
def __del__(self):
print('好好学习')
hansha = Person()
print(11111)
del hansha
print(22222)
输出为:
11111
好好学习
22222
复制代码
总结的高级版:
基于变量计数的对象销毁机制
当没有一个变量指向某个对象的时候,python会自动销毁这个对象,以便回收内存空间。
del关键字,可以删除一个变量的指向。
class Person:
def __init__(self,name): #初始化方法
self.name = name
def __del__(self): #析构方法(销毁方法)
print(self.name,"被销毁了")
wuhan = person("无名")
del wuhan #输出为:被销毁了
复制代码