类与对象

类与对象

类:

是一组相关属性和行为的集合。可以看成是一类事物的模板,使用事物的属性特征和行为特征来描述该 类事物。

举例:猫。

 

属性:名字、体重、年龄、颜色。   行为:走、跑、叫。

 

对象:

类的具体体现,实现。

举例:一只小猫。

 

属性: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函数

 

Tags: