第六节
类和方法
1.类的作用及析构函数
class role:
def __init__(self,name,age,life_valie): #类的初始化变量
self.name = name
self.age = age
self.__life_value = life_valie
def __del__(self):
print("this is 析构函数")
def got_shot(self):
self.__life_value -= 50 #定义私有变量,只能在类的内部调用
def show_life_value(self):
print(self.__life_value) #私有变量可以通过调用某些方法来取出
r1=role("jack",18,100)
print(r1.name)
r1.got_shot()
r1.show_life_value()
运行结果:
jack
50
this is 析构函数
2.父类和子类
class people:
def __init__(self,name,age):
self.name = name
self.age = age
def talk(self):
print("%s is talking" % self.name)
def sleep(self):
print("%s is sleeping" % self.name)
class man(people):
def sleep(self):
people.sleep(self)
print("man %s is sleeping" % self.name)
class woman(people):
def sleep(self):
print("woman %s is sleeping" % self.name)
m1=man("jack",25)
m1.sleep()
m2=woman("mary",24)
m2.sleep()
运行结果:
jack is sleeping
man jack is sleeping
woman mary is sleeping
3.经典类与新式类
#class people: #经典类
class people(object):
def __init__(self,name,age):
self.name = name
self.age = age
def talk(self):
print("%s is talking" % self.name)
def sleep(self):
print("%s is sleeping" % self.name)
class man(people):
def __init__(self,name,age,weight):
#people.__init__(self,name,age) #经典类
super(man,self).__init__(name,age) #新式类
self.weight = weight
print("%s 的年龄%s,体重%d" % (self.name,self.age,self.weight))
def sleep(self):
people.sleep(self)
print("man %s is sleeping" % self.name)
class woman(people):
def sleep(self):
print("woman %s is sleeping" % self.name)
m1=man("jack",25,30)
m1.sleep()
m2=woman("mary",24)
m2.sleep()
运行结果:
jack 的年龄25,体重30
jack is sleeping
man jack is sleeping
woman mary is sleeping
4.继承多个类
#class people: #经典类
class people(object):
def __init__(self,name,age):
self.name = name
self.age = age
def talk(self):
print("%s is talking" % self.name)
def sleep(self):
print("%s is sleeping" % self.name)
class relationship(object):
def make_friends(self,obj):
print("%s is making friends with %s" % (self.name,obj.name))
class man(people,relationship):
def __init__(self,name,age,weight):
#people.__init__(self,name,age) #经典类
super(man,self).__init__(name,age) #新式类
self.weight = weight
print("%s 的年龄%s,体重%d" % (self.name,self.age,self.weight))
def sleep(self):
people.sleep(self)
print("man %s is sleeping" % self.name)
class woman(people):
def sleep(self):
print("woman %s is sleeping" % self.name)
m1=man("jack",25,30)
m1.sleep()
m2=woman("mary",24)
m2.sleep()
m1.make_friends(m2)
运行结果:
jack 的年龄25,体重30
jack is sleeping
man jack is sleeping
woman mary is sleeping
jack is making friends with mary
5.深度优先与广度优先
python2类的继承为深度优先
python3类的继承为广度优先
6.继承
class School(object):
def __init__(self,name,addr):
self.name= name
self.addr = addr
self.students = []
self.staffs = []
def enroll(self,stu_obj):
self.students.append(stu_obj)
print("为新学生%s办理注册手续" % stu_obj.name)
def hire(self,staf_obj):
self.staffs.append(staf_obj)
print("雇佣新员工%s" % staf_obj.name)
class SchoolNumber(object):
def __init__(self,name,age,sex):
self.name = name
self.age = age
self.sex = sex
def tell(self):
pass
class Teacher(SchoolNumber):
def __init__(self,name,age,sex,salary,course):
super(Teacher, self).__init__(name,age,sex)
self.salary = salary
self.course = course
def tell(self):
print('''
----info of teacher----
Name:%s
Age:%s
Sex:%s
Salary:%s
Course:%s
''' % (self.name,self.age,self.sex,self.salary,self.course))
def teach(self):
print("%s is teaching course [%s]" % (self.name,self.course))
class Student(SchoolNumber):
def __init__(self,name,age,sex,stu_id,grade):
super(Student, self).__init__(name,age,sex)
self.stu_id = stu_id
self.grade = grade
def tell(self):
print('''
----info of teacher----
Name:%s
Age:%s
Sex:%s
Stu_id:%s
Grade:%s
''' % (self.name,self.age,self.sex,self.stu_id,self.grade))
def pay_tuition(self,amount):
print("%s has paid tuition for $%s" % (self.name,amount))
school = School("河北农业大学","保定")
t1=Teacher("tom",53,"male",10000,"Python")
t2=Teacher("jack",48,"female",10000,"Math")
s1=Student("panjiatao",25,"male",10001,"大四")
s2=Student("mary",22,"female",10002,"大二")
t1.tell()
s1.tell()
school.hire(t1)
school.enroll(s1)
school.enroll(s2)
print(school.students) #两个列表
print(school.staffs)
school.staffs[0].teach()
for stu in school.students:
stu.pay_tuition(5000)
运行结果:
----info of teacher----
Name:tom
Age:53
Sex:male
Salary:10000
Course:Python
----info of teacher----
Name:panjiatao
Age:25
Sex:male
Stu_id:10001
Grade:大四
雇佣新员工tom
为新学生panjiatao办理注册手续
为新学生mary办理注册手续
[<__main__.Student object at 0x000000304CC05080>, <__main__.Student object at 0x000000304CC050B8>]
[<__main__.Teacher object at 0x000000304CBF9FD0>]
tom is teaching course [Python]
panjiatao has paid tuition for $5000
mary has paid tuition for $5000
多态