python 类

匿名 (未验证) 提交于 2019-12-02 22:11:45

 1 class Human:  2     total_count = 0  # 类变量  3     def __init__(self, name):  4         print(name, 对象被创建)  5   6 print(Human.total_count)  # 类直接访问类变量 0  7 h1 = Human(小张)  8 print(h1.total_count)  # 0 用此类的实例可以访问类变量  9 h1.total_count = 100  # 为对象添加实例变量 10 print(h1.total_count)  # 100, 优先访问对象的实例变量 11 print(Human.total_count)  # 0, 访问类的类变量 12 print(h1.__class__.total_count) #0 通过此类的实例对象的__class__属性来访问类变量
类变量的访问

 1 class Human:  2     # 以下列表限制此类的对象只能有‘name‘ 和‘age‘ 属性  3     __slots__ = [name, age]  4   5     def __init__(self, name, age):  6         self.name, self.age = name, age  7   8   9 h1 = Human("Tarena", 15) 10 print(h1.age)  # 15 11 # h1.Age = 18  # 出错,h1对象没有Age属性,也不允许有Age属性 12 print(h1.age)  # 15
__slots__ = [" ", " "]

 1 class A:  2     v = 0  3     @classmethod  4     def get_v(cls):  # cls 用来绑定调用此方法的类  5         return cls.v  # 访问类变量  6     @classmethod  7     def set_v(cls, value):  8         cls.v = value  9 print(A.get_v())  # 0 10 A.set_v(100) 11 print(A.get_v())  # 100 12 a1 = A()  # 创建实例 13 print("a1.get_v() =", a1.get_v())  # 100 14 a1.set_v(200) 15 print("a1.get_v() =", a1.get_v())  # 200 16 print(A.get_v() =, A.get_v())     #200
@classmethod

1 class A: 2     @staticmethod 3     def myadd(a, b): 4         return a + b 5  6  7 print(A.myadd(100, 200))  # 300 8 a = A()  # 创建实例 9 print(a.myadd(300, 400))  # 700
@staticmethod

 1 class Human:  # 人类的共性  2     def say(self, what):  3         print("say:", what)  4   5     def walk(self, distance):  # 走路  6         print("走了", distance, 公里)  7   8   9 class Student(Human): 10     def study(self, subject): 11         print("正在学习:", subject) 12  13  14 class Teacher(Student): 15     ‘‘‘说话,行走,教学‘‘‘ 16     def teach(self, subject): 17         print("正在教:", subject) 18  19 h1 = Human() 20 h1.say(天气晴了) 21 h1.walk(5) 22 print(---------------) 23 s1 = Student() 24 s1.walk(4) 25 s1.say(感觉有点累) 26 s1.study(Python) 27 print(===============) 28 t1 = Teacher() 29 t1.walk(6) 30 t1.say(吃点啥好呢) 31 t1.teach(面向对象) 32 t1.study(转魔方)
继承

 1 class A:  2     def works(self):  3         print("A.works被调用")  4   5 class B(A):  6     ‘‘‘ B类继承自A类‘‘‘  7     def works(self):  8         print("B.works被调用")  9  10 b = B() 11 b.works()  # B方法被调用 12  13 # a = A() 14 # a.works()  # A.works被调用
覆盖
 1 class A:  2     def works(self):  3         print("A.works被调用")  4   5 class B(A):  6     ‘‘‘ B类继承自A类‘‘‘  7     def works(self):  8         print("B.works被调用")  9  10 b = B() 11 b.works()  # B.works被调用 12 A.works(b)  # 用类名显式调用, A.works被调用
覆盖

super 函数

 1 class A:  2     def works(self):  3         print("A.works被调用")  4   5 class B(A):  6     ‘‘‘ B类继承自A类‘‘‘  7     def works(self):  8         print("B.works被调用")  9  10     def super_work(self): 11         self.works()  # B.works被调用 12         super(B, self).works()  # A.works被调用 13         super().works()  # A.works被调用 14  15  16 b = B() 17 # b.works()  # B.works被调用 18 # super(B, b).works()  # A.works被调用 19 b.super_work()  # ... 20 # super().works() # 出错,只能在方法内调用
sup().父类方法()

 1 class Human:  2     def __init__(self, n, a):  3         self.name, self.age = n, a  4         print("Human的__init__方法被调用")  5   6     def infos(self):  7         print("姓名:", self.name)  8         print("年龄:", self.age)  9  10 class Student(Human): 11     def __init__(self, n, a, s=0): 12         super().__init__(n, a)  # 显式调用父类的初始化方法 13         self.score = s  # 添加成绩属性 14         print("Student类的__init__方法被调用") 15  16     def infos(self): 17         super().infos()  # 调用父类的方法 18         print("成绩:", self.score) 19  20 s1 = Student(小张, 20, 100) 21 s1.infos()
super().__init__(n,a)

 1 #    list类里只有一个append向末尾加一个元素的方法,但没有向列表头部添加元素的方法,试想能否为列表在不改变原有类的基础上添加一个insert_head(n) 方法,实现在列表的头部(前部)添加元素  2 #   如:  3 #     class MyList(list):  4 #         def insert_head(self, n):  5 #             ...  # 需要自己添加代表  6   7 #     myl = MyList(range(3, 6))  8 #     print(myl)  # [3, 4, 5]  9 #     myl.insert_head(2) 10 #     print(myl)  # [2, 3, 4, 5] 11 #     myl.append(6) 12 #     print(myl)  # [2, 3, 4, 5, 6] 13  14  15 class MyList(list): 16     def insert_head(self, n): 17         # ...  # 需要自己添加代表 18         # self[0:0] = [n] 19         self.insert(0, n)  # 头插 20  21  22 myl = MyList(range(3, 6)) 23 print(myl)  # [3, 4, 5] 24 myl.insert_head(2) 25 print(myl)  # [2, 3, 4, 5] 26 myl.append(6) 27 print(myl)  # [2, 3, 4, 5, 6]
View Code

 1 #   用类来描述一个学生的信息(可以修改之前写的Student类)  2 #     class Student:  3 #          .... 此处自己实现  4   5 #     学生信息有:  6 #        姓名, 年龄, 成绩  7   8 #     将一些学生的对象存于列表中,可以任意添加和删除学生信息  9 #       1) 打印出学生的个数 10 #       2) 打印出所有学生的平均成绩 11 #       3) 打印出所有学生的平均年龄 12  13  14 class Student: 15     docs = []  # 用来存储所有学生信息(类变量) 16  17     def __init__(self, n, a, s): 18         self.name, self.age, self.score = n, a, s 19  20     @classmethod 21     def add_student(cls): 22         s = Student(小张, 20, 100) 23         cls.docs.append(s) 24         s = Student(小李, 18, 98) 25         cls.docs.append(s) 26  27     @classmethod 28     def get_student_count(cls): 29         return len(cls.docs) 30  31     @classmethod 32     def get_avg_score(cls): 33         ‘‘‘ 获取所有学生的平均成绩‘‘‘ 34         total = 0.0 35         for s in cls.docs: 36             total += s.score 37         return total / len(cls.docs) 38  39 Student.add_student()  # 添加学生 40 print(当前有%d个学生 % Student.get_student_count()) 41 print(当前学生的平均成绩是:, Student.get_avg_score())
View Code

 1 #   用类来描述一个学生的信息(可以修改之前写的Student类)  2 #     class Student:  3 #          .... 此处自己实现  4   5 #     学生信息有:  6 #        姓名, 年龄, 成绩  7   8 #     将一些学生的对象存于列表中,可以任意添加和删除学生信息  9 #       1) 打印出学生的个数 10 #       2) 打印出所有学生的平均成绩 11 #       3) 打印出所有学生的平均年龄 12  13  14 class Student: 15     def __init__(self, n, a, s): 16         self.name, self.age, self.score = n, a, s 17  18 docs = []  # 用来存储所有学生信息 19  20 def add_student(lst): 21     s = Student(小张, 20, 100) 22     lst.append(s) 23     s = Student(小李, 18, 98) 24     lst.append(s) 25  26 def get_student_count(lst): 27     return len(lst) 28  29 def get_avg_score(lst): 30     ‘‘‘ 获取所有学生的平均成绩‘‘‘ 31     total = 0.0 32     for s in lst: 33         total += s.score 34     return total / len(lst) 35  36 add_student(docs)  # 添加学生 37 print(当前有%d个学生 % get_student_count(docs)) 38 print(当前学生的平均成绩是:, get_avg_score(docs))
View Code

原文:https://www.cnblogs.com/LXP-Never/p/9368395.html

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!