Python类

160 阅读6分钟

一、概述python 类与对象

类 = 面向对象 (×)

  1. 类只负责去描述,定义行为,不负责执行代码,不能在类内执行方法(函数)
  2. 定义 类 和 类的使用 应该在不同模块中
  3. 类:包含 特征(变量) 与 行为(函数)
  4. 类最基本的作用:封装代码

面向对象的核心

  1. (行为与特征)
  2. 对象

注意: 实现面向对象编程重在 编写有意义的面向对象的代码

二、定义类

类名第一个字母大写,不建议使用下划线连接单词,而是都大写StudentHomework

在类的内部可以:
1.定义若干个变量 2.定义函数
1. 构造函数
- 构造函数的调用是在实例化时自动进行的
- 可以显示调用 构造函数,**返回 必须为 None 类型**
- **显示调用构造函数不会生成一个对象**
 def __init__(self):
     pass
 a = Student.__init__()  # 返回 None,**显示调用构造函数 不会创建一个对象**

通过构造函数完成对类的使用,生成对象

# 使用类 
# 实例化类,实例化时若构造函数中有参数,必须传入
student = Student('时感到', 22)  # 实例化不需要new关键字
2. 定义实例变量和实例方法

必须通过self关键字

 def __init__(self, name, age):
        # 初始化对象的特征值
        # 此处定义实例变量,通过self定义+实例变量名字 
        self.name = name
        self.age = age
# 实例方法 默认第一个参数为self
def do_homework(self):
    print('do homework')
3. 类变量

定义类变量注意 类变量的定义要注意 其意义 students_sum = 0 # 班级所以学生总数 name = 'qiyue' # 这种就不叫作类变量了

 # 此处定义为 类变量 --> 类变量的定义要注意 其意义
    students_sum = 0  # 班级所以学生总数
    name = 'qiyue' # 这种就不叫作类变量了

def __init__(self, name, age):
        # 实例方法访问 类变量
        Student.students_sum += 1
        # 等同于self.__class__.students_sum += 1
        # self内置__class__ 指向 类 本身

注意:self内置__class__ 指向 类 本身,可以通过其访问类变量 调用类变量

  1. 在实例方法和类外通过类名.变量名 调用
  2. 类方法内通过 cls.变量名调用
4. 类方法
  1. 关键在于 装饰器 @classmethod,此装饰器是类方法与实例方法的 根本区别
  2. 注意类方法中调用类变量的不同,定义时传入的参数指向本类 cls
# 类方法 --> 需使用装饰器
    @classmethod # 此装饰器是类方法与实例方法的 根本区别
    def plus_sum(cls):
        # 类方法操作类变量
        cls.students_sum += 1

调用类方法:

# 调用类方法 Student.plus_sum()
# 通过对象调用类方法 student.plus_sum()
5. 静态方法

不需要默认参数,可以访问类变量,访问方式与实例方法相同

 # 静态方法 (不需默认参数)
    @staticmethod
    def add(x, y):
        # 可以访问类变量
        print(Student.students_sum)
        pass

调用静态方法可以通过类 也可以通过对象 调用

# 调用静态方法
student.add(1, 2)
Student.add(1, 2)

三、总结

1. 方法和函数的区别:
  • 方法: 设计层面 的称谓
  • 函数: 程序运行、过程式的一种称谓
2. 变量与数据成员:
  • 数据成员,类内的变量,刻画类的特性
3. 类和对象:
  1. 类是现实世界或思维试接中的实体在计算机中的反映, 它将数据以及这些数据上的操作封装在一起
  2. 类: 行为与特征
  3. 对象:表是一个具体的概念
    对象 = 类的实例化
4. 类变量 与 实例变量

类变量不能与模块变量等同,各有规则

  1. 要将每个对象的特征值保存在 实例变量中
  2. 实例变量通过 self关键字定义,在__init__函数中
  3. 类变量与具体的对象无关
  4. 类与对象的变量查找顺序 --> 先实例变量再类变量( 类外部调用此机制才存在 )

__dict__ 对象内置变量,用于保存当前对象下所有相关的变量(实例变量)

print(student.__dict__)
print(Student.__dict__)
self:
  1. 定义实例方法默认第一个参数
  2. 调用实例方法时不需要传入,python默认传入 意义: self即当前调用某一个方法的对象,只和对象有关

整体代码:

class Student():
    # 类体
    '''
    在类的内部可以:
    1.定义若干个变量 2.定义函数
    '''
    # 此处定义为 类变量 --> 类变量的定义要注意 其意义
    students_sum = 0  # 班级所以学生总数
    name = 'qiyue' # 这种就不叫作类变量了
    # 构造函数
    '''1.构造函数的调用是在实例化时自动进行的
       2.可以显示调用 构造函数,返回 必须为 None 类型
       3.显示调用构造函数不会生成一个对象
    '''
    def __init__(self, name, age):
        # 初始化对象的特征值
        # 此处定义实例变量,通过self定义+实例变量名字 
        self.name = name
        self.age = age

        # 实例方法访问 类变量
        Student.students_sum += 1
        # 等同于self.__class__.students_sum += 1
        # self内置__class__ 指向 类 本身


    # 实例方法 默认第一个参数为self
    def do_homework(self):
        print('do homework')

    # 类中编写函数(方法)必需有 self 参数
    def print_file(self):
        print('name: ' + self.name)
        print('age: ' + str(self.age))


    # 类方法 --> 需使用装饰器
    @classmethod # 此装饰器是类方法与实例方法的 根本区别
    def plus_sum(cls):
        # 类方法操作类变量
        cls.students_sum += 1

    # 静态方法 (不需默认参数)
    @staticmethod
    def add(x, y):
        # 可以访问类变量
        print(Student.students_sum)
        pass


# 使用类 
# 实例化类,实例化时若构造函数中有参数,必须传入
student = Student('时感到', 22)  # 实例化不需要new关键字
print(student.__dict__)
print(Student.__dict__)
student.print_file() # 调用类下面的方法
# 调用类变量 Student.sum
# 调用实例变量 student.name

# 调用类方法 Student.plus_sum()
# 通过对象调用类方法 student.plus_sum()

# 调用静态方法
student.add(1, 2)
Student.add(1, 2)

'''
方法和函数的区别:
方法: 设计层面 的称谓
函数: 程序运行、过程式的一种称谓

变量与数据成员:
数据成员,类内的变量,刻画类的特性
'''

'''
类和对象:
1.类是现实世界或思维试接中的实体在计算机中的反映
它将数据以及这些数据上的操作封装在一起
2.类: 行为与特征
3.对象:表是一个具体的概念  
    对象 = 类的实例化
'''

# 类的实例化与意义
# a = student.__init__()  # 返回 None,显示调用构造函数 不会创建一个对象
# print(a)
# 构造函数的作用:可以使类生成不同的对象

'''
类变量 与 实例变量
    类变量不能与模块变量等同,各有规则
1.要将每个对象的特征值保存在 实例变量中
    实例变量通过 self关键字定义
2.类变量与具体的对象无关
3.类与对象的变量查找顺序 --> 先实例变量再类变量( 类外部调用此机制才存在 )
    __dict__ 对象内置变量,用于保存当前对象下所有相关的变量
    print(student.__dict__)
    print(Student.__dict__)
'''

'''
self:
1. 定义实例方法默认第一个参数
2. 调用实例方法时不需要传入,python默认传入
意义: self即当前调用某一个方法的对象,只和对象有关
'''