

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


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


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


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() # 出错,只能在方法内调用


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()


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]


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())


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))
原文:https://www.cnblogs.com/LXP-Never/p/9368395.html