Python-Class(类)生命周期和魔法方法

内置属性和方法

方法名 类型- 作用
__init__ 方法 类实例化时自动调用这个函数
__del__ 方法 对象被内存中销毁前,会被自动调用
__str__ 方法 类的实例打印时调用这个函数(返回)用户看到的
__repr__ 方法 和上面的str函数一样,只是这个时返回开发者看到的
__ getattr __ 方法 当调用不存在的属性时访问这个方法
__call__ 方法 如果类实现了这个方法,相当于把这个类型的对象当作函数来使用,相当于 重载了括号运算符

具体参考Python3标准库

生命周期

  • 一个对象从调用类名()开始创建,生命周期开始
  • 一个对象 __del__ 方法一旦被调用,生命周期结束
  • 在对象生命周期内可以访问,对象属性,或者让对象调用方法

例如:

1
2
3
4
5
6
7
8
9
10
11
12
class Cat:
def __init__(self, name):
self.name = name
print('他来了 他来了')

def __del__(self):
print('他走了 他走了')

# Tom 是一个全局变量
tom = Cat('Tom')
print(tom.name)
print('-' * 50)

执行如下

1
2
3
4
他来了 他来了
Tom
--------------------------------------------------
他走了 他走了

现在 我们调用 del 删除 tom

1
2
3
4
5
6
7
-- omit --

# Tom 是一个全局变量
tom = Cat('Tom')
print(tom.name)
del tom
print('-' * 50)

1
2
3
4
他来了 他来了
Tom
他走了 他走了
--------------------------------------------------

Class魔法方法

上面的表格以及描述的差不多了,贴一段代码来例举

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
class Cat:
# 类实例化时自动调用这个函数
def __init__(self, name):
self.name = name
print('%s他来了 他来了' % self.name)

# 对象被内存中销毁前,会被自动调用
def __del__(self):
print('他走了 他走了')

# 类的实例打印时调用这个函数(返回)用户看到的
def __str__(self):
return '我是Cat的类'

# 和上面的str函数一样,只是这个时返回开发者看到的
def __repr__(self):
return '__repr__'

# 当调用不存在的属性时访问这个方法
def __getattr__(self, item):
item = 'A'
print('属性不存在,默认为 %s' % item)

# 如果类实现了这个方法,相当于把这个类型的对象当作函数来使用,相当于 重载了括号运算符
def __call__(self, *args, **kwargs):
print('我是 %s 通过__call__转函数实例化的' % args)


# Tom 是一个全局变量
tom = Cat('Tom')
print(tom.name)
# del tom
print('-' * 50)
print(tom)
tom.sex
print('*' * 50)
tom('Tim')

懒的同学 看下面 执行结果

1
2
3
4
5
6
7
8
Tom他来了 他来了
Tom
--------------------------------------------------
我是Cat的类
属性不存在,默认为 A
**************************************************
我是 Tim 通过__call__转函数实例化的
他走了 他走了

__call__ 如果没有定义的话 就 tom('Tim') 就用实例直接调用类的话会保持哟~

本网站作品部分来自于网络,感谢开源社区的诸多开发者 My_Github and My_E-mail

Copyright © 2013 - 2019 Ruoduan's Blog All Rights Reserved.

滇ICP备19003866号 本网站版权归本站作者Ruoduan所有

访客数 : | 访问量 :

{% if theme.fireworks %} {% endif %} {% if theme.canvas_nest %} {% endif %} {% if theme.Background_music %} {% endif %}