面向对象主要有3大特性:封装 继承 多态
封装:
class Role(object):
def __init__(self,name,role,weapon,life_value = 100,money = 15000):#构造函数 在实例化时做一些类的初始化的工作
self.name = name#实例变量(静态属性),作用域就是实力本身
self.role = role
self.weapon = weapon
self.life_value = life_value
self.money = money
def shot(self):#类的方法,功能(动态属性)
print("shooting.......")
def got_shot(self):
print("ah.....,I got shot...")
def buy_gun(self,gun_name):
print("just bought %s" %gun_name)
r1 = Role('Hcl','police','AK47')
r2 = Role('ln','terrorist','B22')
继承示例:
class SchoolMember(object):
members = 0
def __init__(self,name,age):
self.name = name
self.age = age
def tell(self):
pass
def enroll(self):
"""注册"""
SchoolMember.members += 1
print("member %s is enrooled,now there are %s members." %(self.name,SchoolMember.members))
def __del__(self):
"""析构方法"""
print("member %s is dead!" %self.name)
class Teacher(SchoolMember):
def __init__(self,name,age,course,salary):
#SchoolMember.__init(name,age) #经典类继承
super(Teacher,self).__init__(name,age) #新式类继承
self.course = course
self.salary = salary
self.enroll()
def teaching(self):
""""讲课方法"""
print("Teacher %s is teaching %s for class %s" %(self.name,self.course,'s12'))
def tell(self):
""""自我介绍"""
msg = "Hi myname is %s,works for %s as a %s teacher" %(self.name,'NJAU',self.course)
print(msg)
class Student(SchoolMember):
def __init__(self,name,age,grade,sid):
super(Student,self).__init__(name,age)
self.grade = grade
self.sid = sid
self.enroll()
def tell(self):
"""自我介绍方法"""
msg = "Hi My name is %s , I'm studing %s in %s!" %(self.name,self.grade,'NJAU')
print(msg)
if __name__ == '__main__':
t1 = Teacher('hcl',18,'python',20000)
t2 = Teacher('ln',13,'Linux',3000)
s1 = Student('hnnn',23,'python S12',1483)
s2 = Student('ln',33,'Linux S12',1488)
t1.teaching()
t2.teaching()
t1.tell()
输出:
member hcl is enrooled,now there are 1 members.
member ln is enrooled,now there are 2 members.
member hnnn is enrooled,now there are 3 members.
member ln is enrooled,now there are 4 members.
Teacher hcl is teaching python for class s12
Teacher ln is teaching Linux for class s12
Hi myname is hcl,works for NJAU as a python teacher
member hcl is dead!
member ln is dead!
member hnnn is dead!
member ln is dead!
多态示例:一种接口 多种实现 接口重用
class Animal(object):
def __init__(self,name):
self.name = name
def talk(self):
raise NotImplementedError("Subclass must implement abstract method")
class Cat(Animal):
def talk(self):
print("%s:喵喵" %self.name)
class Dog(Animal):
def talk(self):
print("%s:汪汪汪" %self.name)
def func(obj):#一种接口 多种形态
obj.talk()
c1 = Cat('小青')
d1 = Dog('小李')
func(c1)
func(d1)
输出:
小青:喵喵
小李:汪汪汪