在真实世界的校园内有学生有老师,学生有自己的姓名、性别、学号或班级,老师也有对应的属性,如果我们需要围绕整个校园开发一个管理系统时,那么学生、老师可以比喻为类,徐同学、王同学是学生类里面的个体,被称为对象,对象也被称为实例
比如定义一个汽车类(cars),那么宝马、奔驰、奥迪就是类里面的对象
定义类
Python中的数据类型都是类,我们可以自定义类,即创建一种新的数据类型
class Car(obj): # 类
pass # 占位
创建对象
如果说类相当于一个模板,那么依据这个模板来创建对象,这个就是类的实例化,所以对象也被称为“实例”
class Car():
pass
car = Car() < —— 创建一个汽车对象,小括号表示构造调用方法,用于初始化
^
|
刚刚创建的一个汽车对象
以car = Car()这样的语句,我们可以创建一个“汽车”实例,即一个具体的“汽车”对象,而在类名Car后加(),组成一个类似函数调用的形式Car(),则执行了一个叫做实例化的过程,即根据定义好的规则,创建一个包含具体数据的“汽车”对象
类成员与成员操作
在一个构造的类体中,可以创建类的属性,类的方法,比如我创建了一个叫ganyu的类,我可以赋予给它姓名、性别等属性,也可以赋予它方法
class GanYu:
# 属性
sex = '女'
name = 'admin'
passwd = 123
并且在类的外部可以通过“对象.实例变量”的方式进行访问和操作
class GanYu:
# 属性
sex = '女'
name = 'admin'
passwd = 123
# 1、访问
r1 = GanYu.sex
print(r1) # 女
# 2、修改类成员的属性
r2 = GanYu.sex = 'girl'
print(r2) # girl
# 如果通过类把属性进行类修改,那么再通过这个类实例化的对象,它的属性是什么?之前创建的对象呢
r3 = GanYu()
print(r3.sex) # 输出修改后的结果,结果为girl
# 给类添加成员
GanYu.like = 'swim'
print(GanYu.like) # 添加成功
# 通过类创建对象是否也存在这个属性呢?之前创建的对象和之后创建的对象
print(r3.like) #存在
# 删除类的成员
del GanYu.sex
成员方法与操作
以创建一个“学生”类为例
class Student(obj):
pass
这样就可以创建一个以“学生”的实例,即一个具体的“学生”对象,那么问题来了,小王同学也是归于学生类,小明同学也是归于学生类,他们如何区分呢
class Student:
def xiaoming(self):
print('我是小明')
def xiaoya(self):
print('我是小雅')
def xiaohong(self):
print('我是小红')
a = Student()
# 访问小明
# 如果这个对象没有自己独立的方法,那么会访问这个对象的类的方法
r3 = a.xiaoming()
# 小红退学了,小张来了,修改小红为小张
def xiaohong():
print('新的同学,小张')
a.xiaohong = xiaohong
a.xiaohong()
# 小红又来了,给对象添加新的方法
def fun():
print('新的同学,小红')
a.newfunc = fun
a.newfunc()
# 删除方法,只能删除自己的****
del a.newfun
构造方法
类中有一个_ _init __()方法用于创建和初始化实例变量,这种方法被称为构造方法
假设我们需要处理很多学生实例,比如小米、小红、小雅等等,这样不但带来书写上的麻烦,还容易带来错误,这里就可以使用在执行实例化过程Student()时传入一些参数,以方便且正确地初始化/设置一些属性值,那么如何定义这种初始化行为呢?
class Student():
def __init__(self, name='以xx为例', sex='以xx为例', age='以xx为例'): # 第一个参数必须是self,但是不需要传入任何东西,默认从第二个开始传入,并且用来初始化实例变量
self.name = name
self.sex = sex
self.age = age # 创建与初始化实例变量
xiaoming = Student(name='小明', age='12', sex='男')
print(xiaoming.name, xiaoming.age, xiaoming.sex, )
# 带有默认值的构造方法,能够为调用者提供多个不同的构造方法,如果什么都不传,则使用默认方法
xiaohong = Student()
print(xiaohong.name)
实例方法的操作
class Student():
def __init__(self, name='以xx为例', sex='以xx为例', age='以xx为例'): # 第一个参数必须是self,但是不需要传入任何东西,默认从第二个开始传入
self.name = name
self.sex = sex
self.age = age # 创建与初始化实例变量
def run(self):
print(f'{self.name}唱')
def jump(self):
print('跳')
def rap(self):
print('rap')
xiaoming = Student(name='小明')
xiaoming.run()