forked from HaoZhang95/Python24
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbasic01.py
More file actions
48 lines (36 loc) · 1.68 KB
/
basic01.py
File metadata and controls
48 lines (36 loc) · 1.68 KB
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
38
39
40
41
42
43
44
45
46
47
"""
1- __str__()类似于toString方法,不能添加形参,因为是重写,必须返回一个str
2- __del__()用来提前销毁对象内存管理, 使用“del 对象”的时候会触发该方法
3- p1,p2,p3都指向同一个对象的地址张三,只有该类的引用数为0的时候“del 对象名”才会触发del魔法函数
4- 所以说:“只要执行了del,就会执行__del__()”是错误的。
"""
class Person(object):
def __init__(self, name, age, num):
self.name = name
self.age = age
self.num = num
def __str__(self):
return "姓名:%s 年龄: %s 学号: %s" % (self.name, self.age, self.num)
def __del__(self):
# 监听对象销毁,可以用来用户复活
print("再见")
def print_info(self):
print("姓名:%s 年龄: %s 学号: %s" % (self.name, self.age,self.num))
p1 = Person("张三", 18, 1605477)
print(p1)
p2 = p1 # 引用计数+1
p3 = p1 # 引用计数+1
del p1 # 引用计数-1
del p2 # 引用计数-1
del p3 # 引用计数=0
# input()
"""
1- 使用同一个类创建的不同对象,**属性**是需要单独开辟内存的,防止一损俱损
2- 但是类的自定义方法是唯一的只有一份内存, 是通过self判断不同的调用对象是谁
"""
p4 = Person("张三", 18, 1605477)
p5 = Person("张三", 18, 1605477)
print(id(p4.name)) # name作为类属性,有单独的内存空间,id地址不同
print(id(p5.name)) # 但是因为小整数型原因,显示的id相同,但原理id是不同的
print(id(p4.print_info())) # 类方法是唯一一份的,所以id相同
print(id(p5.print_info()))