• Python学习记录 类相关


    2022.08.12 DAY28

    类对象

    • 类对象

        class Student:
            pass  # 空语句
      
      • 1
      • 2
    • type 模具类

    实例:

    class Student:  # 类名首字母大写,多个单词驼峰原则
    
        def __init__(self, name, score):  # self必须位于第一个参数
            """ 构造函数 """
            self.name = name
            self.score = score
    
        def get_score(self):  # self必须位于第一个参数
            """ 获取分数信息 """
            print("{0}的分数为{1}".format(self.name, self.score))
            return self.score
    
    
    def test():
        Stu = Student
        s1 = Student("YJP", 99)
        s2 = Stu("XX", 100)
        s1.get_score()
        s2.get_score()
    
    
    if __name__ == '__main__':
        test()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    结果:

    YJP的分数为99
    XX的分数为100
    
    • 1
    • 2

    类属性

    • 类属性是属于“类对象”的属性,也称为“类变量”。由于类属性也属于类对象,可以被所有的实例对象共享。

    • 类属性的定义方法:

        class 类名:
            类变量名 = 初始值
      
      • 1
      • 2
    • 在类中或者类的外面,我们可以通过:类名.类变量名 来读写。

    实例:

    class People:
    
        company = "Embedded"  # 类属性
        count = 0  # 类属性
    
        def __init__(self, name, age, score):
            self.name = name  # 实例属性
            self.age = age
            self.score = score
            People.count += 1
    
        def get_info(self):  # 实例方法
            print("------------------------------")
            print("- name    : {0}".format(self.name))
            print("- age     : {0}".format(self.age))
            print("- score   : {0}".format(self.score))
            print("- company : {0}".format(self.company))
            print("- count   : {0}".format(self.count))
            print("------------------------------")
    
    
    def test2():
        p1 = People("YJP", 21, 99)
        p1.get_info()
    
    if __name__ == '__main__':
        test2()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    结果:

    ------------------------------
    - name    : YJP
    - age     : 21
    - score   : 99
    - company : Embedded
    - count   : 1
    ------------------------------
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    类方法

    • 类方法是从属于“类对象”的方法。

    • 类方法通过装饰器@classmethod来定义,格式如下:

        @classmethod
        def 类方法名(cls, [形参列表]):
            函数体
      
      • 1
      • 2
      • 3
    • 要点:

      • @classmethod必须位于方法上面的第一行。
      • 第一个cls必须要有,cls指的就是类对象本身。
      • 调用格式:类名.类方法名(参数列表)
      • 类方法中访问实例属性和实例方法会导致错误。
      • 子继承父类方法时,传入cls是子类对象。

    实例:

    class Human:
        base = "碳基生命体"  # 类属性
    
        @classmethod
        def get_base(cls):
            print(cls.base)
    
    
    if __name__ == '__main__':
        Human.get_base()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    结果:

    碳基生命体
    
    • 1

    静态方法

    • Python中允许定义与类对象无关的方法,称为静态方法。

    • 静态方法和模块中定义普通函没用区别,只不过静态方法放到了类的名字空间里面,需要通过类调用。

    • 静态方法通过装饰器@staticmethon来定义,格式如下:

        @staticmethod
        def 类方法名([形参列表]):
            函数体
      
      • 1
      • 2
      • 3
    • 要点:

      • @staticmethod必须位于方法上面的第一行。
      • 第一个cls必须要有,cls指的就是类对象本身。
      • 调用格式:类名.静态方法名(参数列表)
      • 静态方法中访问实例属性和实例方法会导致错误。

    实例:

    class Human:
        base = "碳基生命体"  # 类属性
    
        @classmethod  # 类方法
        def get_base(cls):
            """ 打印信息 """
            print(cls.base)
    
        @staticmethod
        def add(number1, number2):  # 静态方法
            """ 加法计算 """
            sum = number1 + number2
            print("计算:S{0} + {1} = {2}".format(number1, number2, sum))
            return sum
    
    
    if __name__ == '__main__':
        Human.get_base()
        Human.add(45, 55)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    结果:

    碳基生命体
    计算:S45 + 55 = 100
    
    • 1
    • 2
  • 相关阅读:
    每日一题 2651. 计算列车到站时间
    Undefined reference to pthread_create in Linux
    Qt::图层框架-图片图层-序列图层-QGraphicsPixmapItem
    python珍藏宝藏学习资料
    C++面试:磁盘文件系统、虚拟文件系统与文件缓存
    git rebase的基本使用
    MySQL存储引擎
    MySQL事务控制
    【云原生 | Kubernetes 系列】--Gitops持续交付 Tekton Pipeline使用进阶(pvc和Results)
    (五)关系数据库标准语言SQL
  • 原文地址:https://blog.csdn.net/Code_peasant/article/details/126325645