类的语法
类的定义
1 class Dog(object): 2 3 print("hello,I am a dog!") 4 5 6 d = Dog() #实例化这个类, 7 #此时的d就是类Dog的实例化对象 8 9 #实例化,其实就是以Dog类为模版,在内存里开辟一块空间,存上数据,赋值成一个变量名
类的初始化
1 class Dog(object): 2 3 def __init__(self,name,dog_type): 4 self.name = name 5 self.type = dog_type 6 7 def sayhi(self): 8 9 print("hello,I am a dog, my name is ",self.name) 10 11 12 d = Dog('LiChuang',"京巴") 13 d.sayhi()
类的继承
1 class SchoolMember(object): 2 members = 0 #初始学校人数为0 3 def __init__(self,name,age): 4 self.name = name 5 self.age = age 6 7 def tell(self): 8 pass 9 10 def enroll(self): 11 '''注册''' 12 SchoolMember.members +=1 13 print("\033[32;1mnew member [%s] is enrolled,now there are [%s] members.\033[0m " %(self.name,SchoolMember.members)) 14 15 def __del__(self): 16 '''析构方法''' 17 print("\033[31;1mmember [%s] is dead!\033[0m" %self.name) 18 class Teacher(SchoolMember): 19 def __init__(self,name,age,course,salary): 20 super(Teacher,self).__init__(name,age) 21 self.course = course 22 self.salary = salary 23 self.enroll() 24 25 26 def teaching(self): 27 '''讲课方法''' 28 print("Teacher [%s] is teaching [%s] for class [%s]" %(self.name,self.course,'s12')) 29 30 def tell(self): 31 '''自我介绍方法''' 32 msg = '''Hi, my name is [%s], works for [%s] as a [%s] teacher !''' %(self.name,'Oldboy', self.course) 33 print(msg) 34 35 class Student(SchoolMember): 36 def __init__(self, name,age,grade,sid): 37 super(Student,self).__init__(name,age) 38 self.grade = grade 39 self.sid = sid 40 self.enroll() 41 42 43 def tell(self): 44 '''自我介绍方法''' 45 msg = '''Hi, my name is [%s], I'm studying [%s] in [%s]!''' %(self.name, self.grade,'Oldboy') 46 print(msg) 47 48 if __name__ == '__main__': 49 t1 = Teacher("Alex",22,'Python',20000) 50 t2 = Teacher("TengLan",29,'Linux',3000) 51 52 s1 = Student("Qinghua", 24,"Python S12",1483) 53 s2 = Student("SanJiang", 26,"Python S12",1484) 54 55 t1.teaching() 56 t2.teaching() 57 t1.tell()
Python3全是广度优先继承
Python2是经典类是深度优先、新型类是广度优先
多态
1 class Animal(object): 2 def __init__(self, name): # Constructor of the class 3 self.name = name 4 5 def talk(self): # Abstract method, defined by convention only 6 raise NotImplementedError("Subclass must implement abstract method") 7 8 9 class Cat(Animal): 10 def talk(self): 11 print('%s: 喵喵喵!' %self.name) 12 13 14 class Dog(Animal): 15 def talk(self): 16 print('%s: 汪!汪!汪!' %self.name) 17 18 19 20 def func(obj): #一个接口,多种形态 21 obj.talk() 22 23 c1 = Cat('小晴') 24 d1 = Dog('李磊') 25 26 func(c1) 27 func(d1)
另一种更简便的形式
1 class Animal(object): 2 def __init__(self, name): # Constructor of the class 3 self.name = name 4 5 def talk(self): # Abstract method, defined by convention only 6 raise NotImplementedError("Subclass must implement abstract method") 7 8 ###该写成类内的形式 9 @staticmethod 10 def func(obj): # 一个接口,多种形态 11 obj.talk() 12 13 class Cat(Animal): 14 def talk(self): 15 print('%s: 喵喵喵!' % self.name) 16 17 18 class Dog(Animal): 19 def talk(self): 20 print('%s: 汪!汪!汪!' % self.name) 21 22 23 24 25 26 c1 = Cat('小晴') 27 d1 = Dog('李磊') 28 29 Animal.func(c1)