类与对象
类与对象
类:
是一组相关属性和行为的集合。可以看成是一类事物的模板,使用事物的属性特征和行为特征来描述该 类事物。
举例:猫。
属性:名字、体重、年龄、颜色。 行为:走、跑、叫。
对象:
类的具体体现,实现。
举例:一只小猫。
属性:tom、5kg、2 years、yellow。 行为:溜墙根走、蹦跶的跑、喵喵叫。
类与对象的关系
- 类是对一类事物的描述,是抽象的。
- 对象是一类事物的实例,是具体的。
- 类是对象的模板,对象是类的实体。
- 对象是根据类来创建的,类中有什么对象就有什么
举例:当我们提到手机的时候,我们就能想到手机它能够,打电话、听电话、看视频、看图片、听音乐、发信息等基础功能。
但是,我们并不能知道这个手机是什么颜色、品牌、价格等具体实物,这就是类
使用红色的5000元的华为手机,打着电话,那这个手机就是一个对象。
Python中一切皆对象。
1.类的创建
- 创建语法
-
#类的创建 ''' 注意:类名的首字母需要大写,类名也可使用多个单词组成,但是,每个单词的首字母都要大写 请遵循这个规范 ''' class Student: #使用class关键字创建了Student这个类 pass #Python中一切皆对象,那么这个Student是对象吗?内存有开辟空间吗? print(id(Student)) #查看是否开辟空间及其内存地址 1872433931728 print(type(Student)) #查看Student的数据类型 <class 'type'> print(Student) #查看Student的值 <class '__main__.Student'>
-
- 类的组成
- 类的属性:类中方法外的变量称为类属性,被该类的所有对象共享
- 实例方法
- 静态方法:使用类名直接访问
- 类方法:使用类名直接访问
-
class Student: native_pace = "中国" #在类里面定义的变量,称为类属性 #构造方法__init__(self): 当创建对象时,系统会自动调用该方法,从而实现对对象进行初始化 def __init__(self,name,age): self.name = name self.age = age #实例方法 在类之外定义的叫做函数,在类里面定义的叫做方法 def eat(self): #实例方法必须传递一个形参self,可其他名字 print("学生在吃饭") # 使用staticmethod关键字定义静态方法 @staticmethod def fun(): #静态方法不传递任何参数 print("使用了staticmethod进行修饰,所以我是静态方法") #使用classmethod关键字定义类方法 @classmethod def cm(cls): #类方法必须传递一个形参cls(即class),可其他名字 print("使用了classmethod进行修饰,所以我是类方法")
2.对象的创建
- 创建类和对象
class Student: native_pace = "中国" #在类里面定义的变量,称为类属性 #构造方法__init__(self): 当创建对象时,系统会自动调用该方法,从而实现对对象进行初始化 def __init__(self,name,age): self.name = name self.age = age #实例方法 在类之外定义的叫做函数,在类里面定义的叫做方法 def eat(self): #实例方法必须传递一个形参self,可其他名字 print("学生在吃饭") # 使用staticmethod关键字定义静态方法 @staticmethod def fun(): #静态方法不传递任何参数 print("使用了staticmethod进行修饰,所以我是静态方法") #使用classmethod关键字定义类方法 @classmethod def cm(cls): #类方法必须传递一个形参cls,可其他名字 print("使用了classmethod进行修饰,所以我是类方法") student_1 = Student("张三",20) print(id(student_1)) #查看student_1实例对象的空间地址 1229230570848(10进制)--->0x0000011E33D9FD60(16进制) print(type(student_1)) #查看student_1的数据类型 <class '__main__.Student'> print(student_1) #查看student_1实例对象的值 0x0000011E33D9FD60 可以看出实际输出的是内存地址
- 对象使用类的属性和方法
-
student_1 = Student("张三",18) print(student_1.age) #18 print(student_1.name) #张三 print(student_1.native_pace) #中国 student_1.fun() #使用了staticmethod进行修饰,所以我是静态方法 student_1.eat() #张三 学生在吃饭 student_1.cm() #使用了classmethod进行修饰,所以我是类方法 #使用类名调用方法 Student.eat(student_1) #张三 学生在吃饭 #类方法的使用方法 Student.cm() #静态方法的使用方法 Student.fun()
-
- self参数:
- 类的所有方法都必须至少有一个名为self的参数,并且必须是方法的第一个参数。
- 如果把类比作制造汽车的图纸,那么由实例化的对象才是正真可以开的汽车。根据一张图纸可以设计出千千万万的汽车,他们长得都差不多,但是它们都有不同的属性,如颜色不同、内饰不同、所以self就相当于每辆车的编号,有了self,就可以轻轻松松找到对应的车了。
- 在Python中,由同一个类可以生成无数个对象,当一个对象的方法被调用时,对象会将自身的引用作为第一个参数传递给该方法,那么Python就知道需要操作哪个对象的方法了。
3.动态绑定属性和方法
#为对象stu_1动态绑定属性gender stu_1.gender = "女" print(stu_1.gender) #print(stu_2.gender) #报错,因为实例化对象stu_2并没有属性gender #为对象stu_1动态绑定函数,注意:show函数要提前定义好,否则在赋值时,会抛出异常 def show(): print("这是一个被",stu_1,"绑定的show函数") stu_1.show = show stu_1.show() #stu_2.show() #此处代码报错,因为对象str_2并没有绑定show函数