1 -*- coding:utf-8 -*-
2 #在python中如何声明一个类:
3 #class 班级群体
4 #object 继承的父类 object基类、顶级父类
5 classPeople(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 =phone18
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.name37 print(name)38 age =p1.age39 print(age)40 phone =p1.phone41 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 delp1.sex64 #删除对象属性的函数
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 inattr_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 inattr_dict:101 #可以使用delattr函数删除
102 delattr(p1,attr)103
104 #属性删除之后,就不能再使用了
105 #print (p1.iq)
106
107 #析构函数:在实例释放、销毁的时候执行,做收尾工作
108 #如:关闭一些数据库连接、关闭打开的文件等
109 创建析构函数
110 def __def__(self): #在类实例释放时自动执行的,可以不用传参数
111 print('%s 彻底释放了' %self.name) #使用del p1时也会执行析构函数
112
113
114 私有方法 私有属性 在类里面可以改私有属性
115 def __init__(self,name,age,phone)
116 self.name=name
117 self.age=age
117 self.__phone=phone #私有属性
118
119print(p1.phone) 不能访问
120
121 def show_status(self): #在类里面定义一个访问的方法
122 print('%s' %self.phone)
123print(p1.show.status()) 这样访问
124
125私有方法就在方法名前加两个"__"
126 在外面就不能访问
127 p1.__show() #不能访问