一、类
1.类:就是把事物进行区分,也就常见的思维方式——“物以群分”。
2.类是怎么来的?
由N多个对象抽取出“像”的属性和行为从而归纳总结出来的一种类别。
二、在Python当中一切皆对象
1.字符串对象:hello、python、world...
字符串对象属于str字符串类型。
2.整数对象:10、20、985...
整数对象属于int整数类型。
二、自定义数据类型与创建该类的对象
1.自定义数据类型的语法结构:
class 类名():
pass
注:类为“图纸”。
#创建一个新的类
class student():
pass
2.创建对象的语法结构:
对象名=类名()
注:对象“具体实例”。
#将一个student类型的对象
wjl=student()
print(type(wjl))
输出:
<class '__main__.student'>
三、类的组成
1.类的组成:
2. 类的建立与其内部组成成分的调用:
class Student:
# 类属性:定义在类中,方法外的变量
school='XXX学校'
#定义在类中,所以名称发生了改变
#初始化方法
def __init__(self,xm,age):#xm,age是方法的参数,是局部变量
# 局部变量可以在自定义函数中出现,也可以在方法中出现
#如果想使用xm、age这两个两个变量的值之做不到的,要想在在方法外使用这两个变量的值需要使用实例属性
self.name=xm#左侧是实例属性,xm是局部变量,将局部变量的值xm,赋值给实例属性self.name
self.age=age#实例的名称和局部变量的名称可以相同
#现在还不能使用,需要创建了对象后才能使用
#定义在类当中的函数,我们称之为方法,特点自带一个参数self
def show(self):
print(f'我叫:{self.name},今年:{self.age}岁了')
#静态方法
@staticmethod
def sm():
#print(self.name)
#self.show()
#不能调用实例属性和实例方法
print('这是一个静态方法,不能调用实例属性,也不能用实例方法')
@classmethod
def cm(cls):#cls-->class的简写
#print(self.name)
#self.show()
print("这是一个类方法,不能调用实例属性,也不能用实例方法")
#创建类的方法
stu=Student('wjl',18)#为什么串了两个参数,因为__init__方法中,有两个形参,self.是自带的参数,无需手动传入
#实例属性,使用对象名进行打点调用的
print(stu.name,stu.age)
print(Student.school)
#实例方法,使用对象名进行打点调用
stu.show()
#类方法,@classmethod进行修饰的方法,直接使用类名打点调用
Student.cm()
#静态方法,@staticmethod进行修饰的方法,直接使用类名打点调用
Student.sm()
四、用类去创建N多个对象
class Student:
school = 'XXX学校'
def __init__(self, xm, age):
self.name = xm
self.age = age
def show(self):
print(f'我叫:{self.name},今年:{self.age}岁了')
@staticmethod
def sm():
print('这是一个静态方法,不能调用实例属性,也不能用实例方法')
@classmethod
def cm(cls):
print("这是一个类方法,不能调用实例属性,也不能用实例方法")
#图纸画完了,就可以创建N多个对象
stu1=Student('wjl',19)
stu2=Student('w',20)
stu3=Student('j',21)
stu4=Student('l',22)
print(type(stu1))
print(type(stu2))
print(type(stu3))
print(type(stu4))
Student.school='Python学院'
#将学生对象存储到列表中
lst=[stu1,stu2,stu3,stu4]
for i in lst:
i.show()
五、动态绑定属性和方法
每个对象的属性名称相同,但属性值不同。
可以为每个对象绑定独有的属性或方法。
class Student:
school = 'XXX学校'
def __init__(self, xm, age):
self.name = xm
self.age = age
def show(self):
print(f'我叫:{self.name},今年:{self.age}岁了')
@staticmethod
def sm():
print('这是一个静态方法,不能调用实例属性,也不能用实例方法')
@classmethod
def cm(cls):
print("这是一个类方法,不能调用实例属性,也不能用实例方法")
#图纸画完了,就可以创建N多个对象
stu1=Student('wjl',19)
stu2=Student('wjm',20)
Student.school='Python学院'
#为stu2动态绑定一个实例属性
stu2.gender='男'
print(stu2.name,stu2.age,stu2.gender)
#动态绑定方法
def introduce():
print('stu2的动态绑定方法')
stu2.fun=introduce#这个操作是赋值不是函数的调用
#fun就是stu2对象的方法。
#调用
stu2.fun()