dog例子开头
class Dog:
    def __init__(self,name):
        self.name = name
    def bulk(self):
        print("%s:wang wang wang!"%self.name)

d1 = Dog("陈荣华")
d2= Dog("陈三炮")
d3=Dog("陈老炮")

d1.bulk()
d2.bulk()
d3.bulk()

 

CS游戏
class Role():  #类名
    n = 123 #类变量 用途:大家共用的属性
    n_list=[]
    name = "我是类name"
    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 __del__(self):
        print("%s 彻底挂了。。。"%self.name)
    def __shot(self): #类的方法(函数) 功能(动态属性)
        print("shooting...")  #__shot(self) 私有方法

    def got_shot(self):
        print("%s ah...,I got shot..."%self.name)

    def buy_gun(self, gun_name):
        print("%sjust bought %s" %(self.name,gun_name))

    def show_status(self): #定义访问私有属性的方法 私有属性内部可以访问
        self.__life_value -=50
        r1.got_shot()
        print("name:%s,weapon:%s life_value:%s"%(self.name,self.weapon,self.__life_value))

#print(Role.n)
r1 = Role('Alex', 'police', 'AK47')#把一个类变成一个具体对象的过程叫实例化 实例化(初始化一个类,造了一个对象)
r1.buy_gun("ak47")
r1.got_shot()
print(r1.show_status()) #访问私有属性
#print(r1.__life_value) 私有属性之后外面访问不了
#del r1 验证析构函数
#r1.__shot() 私有方法,外面访问不了

r2 = Role('jack', 'terrorist', 'B22')
r2.got_shot()

'''
r1.name="陈荣华" #修改属性
r1.bullet_prove=True #添加属性
r1.n="改的类变量" #相当于给r1新加了一个属性
r1.n_list.append("from r1")
print(r1.weapon)
del r1.weapon #删除属性
#print(r1.weapon)

print("r1:",r1.n,r1.name,r1.bullet_prove) #变量先找实例本身,在去类里面找
#
#r1.got_shot()
r2 = Role('jack', 'terrorist', 'B22')  #生成一个角色 Role的实例
r2.name="徐良伟"
print("r2:",r2.n,r2.name)
r2.n_list.append("from r2")
#r2.got_shot() #Role.got_shot(r2)
#r1.buy_gun("AK47")
Role.n="ABC"
print(Role.n)
print(r1.n,r2.n) #改的类变量只对r2有效
print(r2.n_list) #对于类的列表,类,实例共用同一块内存地址,所以改了实例改了类列表,对类和其他实例都有效,都会跟着改
print(Role.n_list)
'''

继承详解
#class People: 经典类
class People(object): #新式类
    def __init__(self,name,age):
        self.name=name
        self.age=age
        self.friends=[]

    def eat(self):
        print("%s is eating...."%self.name)

    def talking(self):
        print("%s is talking..."%self.name)

    def sleep(self):
        print("%s is sleeping..."%self.name)

class Relation(object): #没有构造函数就去父类People里面找obj.name

    def make_friends(self,obj): #调用的时候已经实例化完成
        print("%s is making friend with %s"%(self.name,obj.name))
        self.friends.append(obj)

class Man(Relation,People): #继承People 多继承
    '''
    def __init__(self,name,age,money): #初始化的时候要将父类的参数写进去 加上money 重构了父类

        #People.__init__(self,name,age) #调用父类的方法 经典类写法
        super(Man,self).__init__(name,age) #两种方法 推荐用这种方法 新式类写法

        self.money=money  #添加的参数
        print("%s 一出生就有%s money"%(self.name,self.money))
    '''
    def piao(self):
        print("%s is piaoing...20s...done"%self.name)
    def sleep(self):
        People.sleep(self) # 重构父类方法 添加新功能 self执行父类传进去
        print("man is sleeping")

class Women(People,Relation): #多继承
    def get_birth(self):
        print("%s is born a baby..."%self.name)

#m1=Man("Niuhanyang",22,10)
m1=Man("Niuhanyang",22)
#m1.eat()
#m1.piao()
#m1.sleep()


w1 = Women("chengronghua",26)
#w1.get_birth()

m1.make_friends(w1) #调用make_friends的时候已经实例化完成
w1.name="chensanpao"
print(m1.friends[0].name)

 

 

继承SchoolMember和Person类  并重构Teacher类
class Teacher(SchoolMember):
    def __init__(self,name,age,sex,salary,course):
        super(Teacher,self).__init__(name,age,sex)
        self.person=Person(self,obj)
        self.salary=salary
        self.course=course


继承SchoolMember和school类,并重构Teacher类
class Teacher(SchoolMember):
    def __init__(self,name,age,sex,salary,course):
        super(Teacher,self).__init__(name,age,sex)
        self.school=school_obj
        self.salary=salary
        self.course=course

 

 

本节笔记
#类变量用途:共用的属性,节省开销
class Person:
    cn="中国"
    def __init__(self,name,age,addr,cn="china"):
        self.name = name
#p1=Person(name,age,addr)

#析构函数:在实例释放,销毁的时候自动执行的,通常用于做一些收尾工作,如关闭一些数据库连接,关闭打开的临时文件,也叫析构方法
#私有方法,私有属性

#继承 节省代码

#3.X版本统一按广度优先来继承(先找横向的)
class A:
    def __init__(self):
        print("A")
class B(A):
    pass
#    def __init__(self):
 #       print("B")
class C(A):
    pass
 #   def __init__(self):
 #       print("C")
class D(B,C):
    pass
 #   def __init__(self):
 #       print("D")
obj=D()

#2.X版本 class A:经典类按深度优先来继承(先纵向方向找)  class A(object):新式类按广度优先来继承
#广度优先效率高