1 -*- coding:utf-8 -*-
2 # 在python中如何声明一个类:
3 # class 班级群体
4 # object 继承的父类 object基类、顶级父类
5 class People(object):
6 n=123 #类变量
7 name='我是类变量'
8 n_list=[]
9 # 初始化函数,在创建对象的时候自动调用
10 # __init__ 内置函数
11 def __init__(self,name,age,phone):
12 # 在这个函数中需要将创建对象时就应该拥有的一些属性赋值
13 # 对象.属性名 = 属性值
14 # 这里的self相当于对象名 如:p1 = People('张三',22,110) 这里的self就是p1
15 self.name = name #实例变量(静态属性) 作用域就是实例的本身
16 self.age = age #相当于p1.age=age
17 self.phone = phone
18
19 def show(self):#类的方法,也叫类的功能 (动态属性)
20 # 这里的self相当于对象名 如:p1.show()这里的self就是p1,相当于People.show(p1),谁调用这个类里方法就是谁。
21
22 print(self.name)
23
24 print(People.n) #没有实例化之前可以使用类变量
25 # 使用People类创建一个对象
26 # 创建对象的基本格式:对象名 = 类名()
27 # 当创建一个对象时,会在内存中开辟一块空间,来存放这个对象,这个对象是有一个地址的
28 # 每次创建的对象都是一个单独个体,他们的内存地址都不一样
29 p1 = People('张三',22,110) #p1也叫做People的实例 也称对象
30 p2 = People('李四',26,120)
31 # 内存:程序运行时,在计算机中占用的空间
32 # python中自动管理内存的
33 print (p1) #<__main__.People object at 0x0000000002217E80>
34 # 获取对象的属性值
35 # 格式 :对象.属性名
36 name = p1.name
37 print(name)
38 age = p1.age
39 print(age)
40 phone = p1.phone
41 print(phone)
42
43 print('---------------',p1.n,p1.name) #可以直接使用类变量和实例变量>>--------------- 123 张三
44 #如果有个类变量是name,那么也打印相同变量名实例变量,没有再找类变量
45
46 # 修改对象的属性值
47 # 格式:对象.属性名 = 属性值
48 p1.name= '李四'
49 print (p1.name)
50
51 # python中用来属性值得函数
52 # 1.要设置属性值的对象 2.要设置的属性名 3.要设置的属性值
53 setattr(p1,'age',21)
54
55 # 可以给对象添加新属性
56 # 对象.属性名 = 属性值 如果这个属性不存在,那就是添加属性
57 p1.sex = '男' #相当于在构造函数中 self.sex=sex 效果一样,只不过只是p1专用,其它对象没有这个属性
58 print (p1.sex)
59
60 # 删除对象的属性
61 # 对象的属性被删除之后,就不能再使用了
62 # AttributeError: sss 要删除的sss属性不存在
63 del p1.sex
64 # 删除对象属性的函数
65 # 1.要删除的对象 2.要删除的属性名
66 delattr(p1,'phone')#或del p1.phone
67 # 删除之后,p1就不能使用这个属性了
68 # print (p1.phone)
69
70 #用实例改变类变量
71 p1.n='改变类变量'
72 #用p1打印
73 print('---------p1-----------',p1.n) #>>---------p1----------- 改变类变量(相当于在p1内存中增加了:p1.n='改变类变量')
74 #用p2打印
75 print('---------p2-----------',p2.n) #>>---------p2----------- 123
76
77 People.n='ABCD'
78 print('p1:',p1.n,'p2:',p2.n) #>>p1: 改变类变量 p2: ABCD
79
80 p1.n_list='from p1'
81 p2.n_list='from p2'
82 print('p1:',p1.n_list,'p2:',p2.n_list,'People:',People.n_list) #>>p1: from p1 p2: from p2 People: []
83
84 # setattr动态添加属性
85 attr_dict = {'iq':'150','eq':'150','color':'yellow'}
86 # for遍历
87 for key,value in attr_dict.items():
88 # key是属性名,value是属性值
89 # setattr,可以将一个字符串的属性名 添加到对象的属性中
90 # p1.key = value 这种方式无法添加相当于写了p1.'iq'= '150'
91 setattr(p1,key,value)
92
93 print (p1.iq)
94
95
96 # delattr动态删除属性
97 # 删除对象p1中的属性
98 attr_dict = ['iq','eq','color']
99
100 for attr in attr_dict:
101 # 可以使用delattr函数删除
102 delattr(p1,attr)
103
104 # 属性删除之后,就不能再使用了
105 # print (p1.iq)