二.python面对对象 ------类的继承

 class person:
     count=0
     def __int__(self):
         self.name='无名'
         self.age=18;
     def show(self):
         print('姓名:'+self.name+' 年龄:'+str(self.age))

    @classmethod
     def sayHello(cls):
         # 类方法更倾向于 工具方法 不需要重复创建对象
         # 不是以对象的形式去调用
         print('这是一个person 类')

         # 一般情况下 静态方法 会单独放在一个模块里
     @staticmethod
     def SayHi(name):
         print(name+'你好....')

==========================================

 类属性:属于类的成员,对象共有的
 修改方式:类名 类属性=...实例对象,__class__类属性=...
 类方法:在方法上添加 @coassmethod 装饰器
 @coassmethod
 def class_method(cls):
 if '__main__'==__name__:
 也可以使用类方法调用类属性,也可以通过对象调用类属性
 静态方法:
 方法前加@coassmethod,静态方法可以加参数,
 静态方法既和类没关系,也和对象没关系,也可以类和对象调用
 面向对象三大特征:封装 ,继承 ,多态

 实例对象,__class__类属性=...
 
 
==========================================
     person.phone='110'
     zhangsan=person()
     zhangsan.name='张三'
     zhangsan.age=20
     zhangsan.show()
     zhangsan.__class__.phone='1355865865'
    
     lisi=person()
     lisi.name='李四'
     lisi.age=90
     lisi.show()
     lisi.__class__.phone='13657867787'
     print(lisi.__class__.phone)

     person.sayHello()
     person.SayHi('5-11')


继承:
 子类继承父类: ()   子类可以使用父类的属性和方法,简化代码。
 当生成子类对象时,先初始化父类对象,
 所以如果父类有__init__()方法,并且有属性时,要通过子类的构造赋值
 初始化时:在子类中,调用父类的属性时,在__init__()方法中使用

即: super().__init__(self,属性)或 self.属性
父类.__init__(self,参数)==>父类.__init__(self)-->调用无参
super(子类,self).__init__(参数)
用子类的父类的 __init__
四种方法给父类传参

多继承:类同时继承多个父类,class C(A,B),
当有AB均有相同方法,而子类又重写时,调用谁的方法,(子类)
如果子类重写没有方法,则调用哪个父类的方法?(左侧,优先继承的类)
 类名.mro(),可以看到所有父类,即搜索顺序
 
 ========================================== 
 

案例 宠物:

class pet:

     def __init__(self,name,love,health):
        '''
        快速初始化数据
        :param name:
        :param love:
        :param health:
        '''
         # 代码的职能 谁做谁的事
         self.name=name
         self.love=love
         self.health=health
     def show(self):
         print('宠物名'+self.name+'健康值:',self.health,'亲密度',self.love)

 class Dog(pet):
     def __init__(self,name,love,health,):
         # super().__init__(name,love,health)        第一种方法
         # pet.__init__(self,name,love,health)      第二种方法
         super().__init__(name,love,health)           #第三种方法
         self.strain='拉布拉多'
     def eat(self):
         print(self.strain+'正在吃饭')
     def showlnfo(self):
         super().show()
         print('品种:',self.strain)
 class lang:
     def show(self):
         print('来自北方的狼。。')
 class can(Dog):
     def __init__(self,name,love,health):
         super(). __init__(name,love,health)
         self.strain = '哆啦A梦'

 # 代表程序主入口 是从这进入的
 if __name__=='__main__':
     dog=Dog('小七',30,99)
     dog.eat()
     dog.love+=20
     dog.show()
     maomi = can('哆啦A梦\t', 80, 100)
     maomi.eat()
     maomi.show()

==========================================

练习 二.

DVD:价格 名称 状态
class DVD:
    def __init__(self,name,price,state):
        self.name=name
        self.price=price
        self.state=state
if __name__=='__main__':
    youran=DVD('悠然的故事',200,1)   #0:借出 1未借出
    chuntian=DVD('春天的风',200,0)   #0:借出 1未借出
    dongtian=DVD('冬天的阳光',200,1) #0:借出 1未借出
    dvds = {youran.name:youran,chuntian.name:chuntian,dongtian.name:dongtian}
    while True:
        print('----DVD管理系统-----')
        print('1.查询说有DVD')
        print('2.增加DVD')
        print('3.借出DVD')
        print('4.归还DVD')
        print('5.退出')
        num=int(input('请选择:'))
        if num == 5:
            break
        elif num == 1:
            print('名字\t价格\t状态')
            for key in dvds.keys():
                if dvds.get(key).state==0:
                    print(key+'\t'+str(dvds.get(key).price)+'\t借出')
                else:
                    print(key+'\t'+str(dvds.get(key).price)+'\t未借出')
        elif num == 2:
            name=input('请输入DVD的名字:')
            while name in dvds.keys():
                name = input('DVD的名字已存在,请重新输入:')
            price = input('请输入DVD的价格')
            new_dvd =DVD(name,price,1)
            dvds[name] = new_dvd
            print('添加成功')
        elif num == 3:
            name = input('请输入要借出的DVD的名字:')
            while name not in dvds.keys():
                name = input('DVD不存在,请重新输入:')
            if dvds.get(name).state==0
                print(name+'已借出')
            else:
                dvds.get(name).state = 0
                print(name+'借出成功')
        elif num == 4:
            name = input('请输入要归还的DVD名字:')
            while name not in dvds.keys():
                name = input('DVD不存在,请重新输入:')
            if dvds.get(name).state == 1:
                print('DVD 未借出')
            else:
                days = int(input('请输入借出的天数:'))
                print('请刷卡:',int(dvds.get(name).price)*days,'.00元')
                dvds.get(name).state = 0
                print('归还成功!')

猜你喜欢

转载自blog.csdn.net/hwj990/article/details/80327703