类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
方法:类中定义的函数。
实例化:创建一个类的实例,类的具体对象。
对象:通过类定义的数据结构实例。
1.定义一个类
例:
注意:不能出现汉字和注释,否则不能保存程序,也不能运行(不知道为什么)
噢,原来是python版本的问题 ,python3.8.0可以,python3.8.4不可以
class Person(object):#object 是python中的基类,所有自定义的类都是基于object,可写可不写 name='张三' # name 就是Person类的属性 在函数中叫做变量 print(Person.name) #输出类属性值 Person.name="李四" #可以修改属性值 print(Person.name)
所以,上面的程序语句修改为:
1 class Person(object): 2 name='zhangsan' 3 print(Person.name) 4 Person.name="lisi" 5 print(Person.name)
输出结果:
>>>
==================== RESTART: C:/Users/lenovo/Desktop/aaa.py ===================
zhangsan
lisi
>>>
说明:
1 class Person(object): #定义一个类,object 是python中的基类,所有自定义的类都是基于object,可写可不写
2 name='zhangsan' # name 就是Person类的属性 在函数中叫做变量
3 print(Person.name) #输出类属性值
4 Person.name="lisi" #可以修改属性值
5 print(Person.name) #输出类属性值
2.类的实例化
定义类之后,为了进行操作方便还要进行实例化。
例如Person这个类是抽象的,男人、女人、老人、小孩统称为Person,是抽象的。
实际操作中往往是对具体对象的特点的操作,所以要进行类的实例化,简而言之,类的实例化就是从抽象的类到具体的对象。
1 class Person(object): 2 name='zhangsan' 3 Gender="male" 4 print(Person.name,Person.Gender) 5 Person.name="Alice" 6 Person.Gender='female' 7 print(Person.name,Person.Gender) 8 xiaofang=Person() 9 print("xiaofang's English Name is:",xiaofang.name) 10 print("xiaofang's Gender is:",xiaofang.Gender)
输出结果如下:
>>> ==================== RESTART: C:/Users/lenovo/Desktop/aaa.py =================== zhangsan male Alice female xiaofang's English Name is: Alice xiaofang's Gender is: female
注意:程序中不能出现中文和注释
学会了几个单词:
gender 性别
male 男性
female 女性
3.类的属性与实例属性之间的关系 :
类的属性实例均有,实例可以调用类属性,但是类不可以调用实例属性
类属性,类可以访问到,实例也可以访问到
实例属性类不可以访问到,但是得实例可以访问到
例:
1 class Person(object): 2 name='zhangsan' 3 Gender="male" 4 print(Person.name,Person.Gender) 5 Person.name="Alice" 6 Person.Gender='female' 7 print(Person.name,Person.Gender) 8 xiaofang=Person() 9 print("xiaofang's English Name is:",xiaofang.name) 10 print("xiaofang's Gender is:",xiaofang.Gender) 11 xiaofang.age="16" 12 print(xiaofang.age) 13 print(person.age)
输出结果如下:
>>> ==================== RESTART: C:/Users/lenovo/Desktop/aaa.py =================== zhangsan male Alice female xiaofang's English Name is: Alice xiaofang's Gender is: female 16 Traceback (most recent call last): File "C:/Users/lenovo/Desktop/aaa.py", line 13, in <module> print(person.age) NameError: name 'person' is not defined
可以为实例xiaofang添加属性
11 xiaofang.age="16"
可以访问实例的属性
12 print(xiaofang.age)
但是类不可以访问到实例的属性
13 print(person.age)
会报错如下:
Traceback (most recent call last):
File "C:/Users/lenovo/Desktop/aaa.py", line 13, in <module>
print(person.age)
NameError: name 'person' is not defined
我的理解是:上级的属性,下级可以访问,但是下级的属性,上级不能访问,当然自己可以访问自己的属性。
4.每个实例都是一个独立的变量空间,不同实例之间的空间互相不可见
1 class Student(): 2 3 student_count = 0 4 5 def __init__(self, name, salary): 6 self.name = name 7 self.age = salary 8 Student.student_count += 1 9 def display_count(self): 10 print('Total student {}'.format(Student.student_count)) 11 12 def display_student(self): 13 print('Name: {}, age: {}'.format(self.name,self.age)) 14 15 16 student1 = Student('zhangsan',6) 17 student2 = Student('lisi', 10) 18 student3 = Student('wangwu',15) 19 20 student1.display_student() 21 student2.display_student() 22 student3.display_student() 23 print(student1.name,id(student1)) 24 print(student2.name,id(student2)) 25 print("Total number of students:",Student.student_count)
输出结果如下:
>>> ================== RESTART: C:\Users\lenovo\Desktop\class1.py ================== Name: zhangsan, age: 6 Name: lisi, age: 10 Name: wangwu, age: 15 zhangsan 44109536 lisi 44501288 Total number of students: 3 >>>