py 继承

# 继承  is a , has a
'''
方法1,求车名在那条公路上以多少时速行驶了多长
    get_time(self.road)
2,初始化车属性信息__init__ 方法
3,打印对象显示车的属性信息
'''
import random


class Road:
    def __init__(self,name,len):
        self.name = name
        self.len = len

class Car:
    def __init__(self,brand,spead):
        self.brand = brand
        self.spead = spead

    def get_time(self,raod):  # r = raod = Road 同一个内存地址
        ran_time = random.randint(1,10)
        msg = f'{self.brand}品牌的车在{raod.name}上,以{self.spead}km/h的速度行驶了{ran_time}小时'
        print(msg)

    def __str__(self):
        return f'{self.brand}品牌的车,速度是{self.spead}km/h'

#创建实例化公路
r = Road('京港澳高速',12000)
dabeng = Car("大G",120)
print(dabeng)

dabeng.get_time(r)

#########################################################
# has a
class Computer:
    def __init__(self,brand,type,color):
        self.brnad = brand
        self.type = type
        self.color = color

    def online(self):
        print('正在上网')

    def __str__(self):
        return f'{self.brnad}---{self.type}---{self.color}'

class Book:
    def __init__(self,bname,author,number):
        self.bname = bname
        self.author = author
        self.number = number

    def __str__(self):
        return f'{self.bname}--{self.author}--{self.number}'


class Student:      # has a
    def __init__(self,name,computer,book):
        self.name = name
        self.computer = computer
        self.books = []
        self.books.append(book)

    def borrow_book(self,book):
        for book1 in self.books:
            if book1.bname == book.bname:
                print('已经借过此书')
                break
        else:
            #将参数book 添加到类表
            self.books.append(book)
            print('添加成功')

    def show_book(self):
        for book in self.books:
            print(book.bname)

    def __str__(self):
        return f'{self.name}--{self.computer}--{self.books}'

c = Computer('mac','mac pro 2018','银色')

b= Book('光之子','唐家三少',3)

s = Student('小三',c,b)

print(s)
#借了那些书
s.show_book()
book1 = Book('鬼吹灯','天下霸唱',8)
s.borrow_book(book1)

s.show_book()

########################
# is a
'''
继承:
    Stu  Emp  都属于一样的类
    相同代码  --》 代码冗余,可读性不高
    
    将相同代码提取 ---》 Person类
        Stu  Emp  __> 继承 Person
        
        class Stu(Persion):
            pass
    特点:
    1,如果类中不定义__init__ ,调用父类 super class的 __init__
    2,如果类继承父类也需要定义自己的__init__ ,就需要在当前类的 __init__ 调用一下父类 __init__
    3,如何调用父类__init__
        super().__init__(参数)
        super(类名,对象).__init(参数)
    4,如果父类有eat(),子类也定义一个eat方法,默认搜索规则:先找当前类,再找父类
        s.eat()
        override:重写(覆盖)
        父类提供的方法不能满足子类的需求,就需要在子类定义一个同名的方法,这种行为:重写
    5,子类的方法中也可以调用父类的方法
        super().方法名(参数)
        
'''
class Person:
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def cat(self):
        print(f'{self.name}正在吃饭')

    def run(self):
        print(f'{self.name}正在跑步')

class Stu(Person):
    def __init__(self,name,age,clazz):
        print('--------->Stu的init')
        #如何调用父类 __init__
        super().__init__(name,age)
        self.clazz = clazz

    def study(self,course):
        print(f'{self.name}正在学习{course}课程')

    def eat(self,food):
        print(f'{self.name}正在吃饭,喜欢吃{food}')


class Emp(Person):
    def __init__(self,name,age,salary,manager):
        super(Emp, self).__init__(name,age)
        self.salary = salary
        self.manager = manager

s= Stu('sansan',19,'NSD1902')
s.run()
s.study('英语')
s.eat('鱼')

e = Emp('zl',20,4000,'老王')
e.run()

##############################################################

class Persion:
    def __init__(self,no,name,salary):
        self.no = no
        self.name = name
        self.salary = salary

    def __str__(self):
        msg = f'工号是{self.no},姓名是{self.name},本月的工资是{self.salary}'
        return msg

    def getSalary(self):
        return self.salary

class Worker(Persion):
    def __init__(self,no,name,salary,hours,per_hour):
        super().__init__(no,name,salary)
        self.hours = hours
        self.per_hour = per_hour

    def getSalary(self):
        money = self.hours * self.per_hour
        self.salary += money
        return  self.salary

class Salesman(Persion):
    def __init__(self,no,name,salary,salemoey,percent):
        super().__init__(no,name,salary)
        self.salemoney = salemoey
        self.percent = percent

    def getSalary(self):
        money = self.salemoney * self.percent
        self.salary += money
        return self.salary

#创建对象
w = Worker('001','jack',2000,160,100)
s = w.getSalary()
print(w)
print('月薪是:',s)


s = Salesman('002','tom',4000,10000000,0.003)
print(s)
s = s.getSalary()
print('月薪是:',s)

############################################################
#多继承(非常少,略)
# 新式类 广度优先   D.__mor__   查看搜索顺序

############################################################
#多态
class Person:
    def __init__(self,name):
        self.name = name

    def feed_pet(self,pet):
        #isinstance (obj 类) —— 判断obj 是不是类的对象或者判断obj是不是该类子类的对象
        if isinstance(pet,Pet ):
            print(f'{self.name}喜欢养宠物{pet.nickname}')
        else:
            print('不是宠物类型')
class Pet:
    def __init__(self,nickname,age):
        self.nickname = nickname
        self.age = age

    def show(self):
        print(f'昵称{self.nickname},年龄{self.age}')

class Cat(Pet):
    role = '猫'
    def catch_mouse(self):
        print('抓老鼠')

class Dog(Pet):
    role = '狗'
    def watch_house(self):
        print('看家')

class Tiger:
    def eat(self):
        print('爱吃肉')

#创建对象
cat = Cat('小花',2)
dog = Dog('大黄',3)
person = Person('珊珊')

person.feed_pet(dog)



 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值