py 继承

news/2024/11/17 18:44:46/
# 继承  is a , has a
'''
方法1,求车名在那条公路上以多少时速行驶了多长get_time(self.road)
2,初始化车属性信息__init__ 方法
3,打印对象显示车的属性信息
'''
import randomclass Road:def __init__(self,name,len):self.name = nameself.len = lenclass Car:def __init__(self,brand,spead):self.brand = brandself.spead = speaddef 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 = brandself.type = typeself.color = colordef online(self):print('正在上网')def __str__(self):return f'{self.brnad}---{self.type}---{self.color}'class Book:def __init__(self,bname,author,number):self.bname = bnameself.author = authorself.number = numberdef __str__(self):return f'{self.bname}--{self.author}--{self.number}'class Student:      # has adef __init__(self,name,computer,book):self.name = nameself.computer = computerself.books = []self.books.append(book)def borrow_book(self,book):for book1 in self.books:if book1.bname == book.bname:print('已经借过此书')breakelse:#将参数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  __> 继承 Personclass 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 = nameself.age = agedef 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 = clazzdef 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 = salaryself.manager = managers= 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 = noself.name = nameself.salary = salarydef __str__(self):msg = f'工号是{self.no},姓名是{self.name},本月的工资是{self.salary}'return msgdef getSalary(self):return self.salaryclass Worker(Persion):def __init__(self,no,name,salary,hours,per_hour):super().__init__(no,name,salary)self.hours = hoursself.per_hour = per_hourdef getSalary(self):money = self.hours * self.per_hourself.salary += moneyreturn  self.salaryclass Salesman(Persion):def __init__(self,no,name,salary,salemoey,percent):super().__init__(no,name,salary)self.salemoney = salemoeyself.percent = percentdef getSalary(self):money = self.salemoney * self.percentself.salary += moneyreturn 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 = namedef 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 = nicknameself.age = agedef 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)

 


http://www.ppmy.cn/news/704084.html

相关文章

python 类关联关系

类的关联关系 一个类调用另一个类的属性和函数方法 “”" 公路(Road): 属性:公路名称 , 公路长度 车(Car): 属性: 车名,时速 方法: 1.求车名在那条公路上以多少的时速行驶了多久 get_time(self,road) 2.初始化车属性信息__init__ 方法 …

python对象

类和对象 类属性和对象属性 当实例化对象的时候,加了新的属性并赋值,会优先使用对象属性(即使类中也有同样的属性),当对象属性没做改变时,使用类属性。 类中self的作用 类中的self其实就是指类本身。 …

Python---继承与多态

Python从入门到高手(内部资源-配学习资料)_哔哩哔哩_bilibili # 私有化 # 封装:1.私有化属性 2.定义公有set和get方法 # __属性:就是将属性私有化,访问范围仅仅限于类中1.隐藏属性不被外界随意修改 2.可以修改&#x…

Python面向对象之私有化属性

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、什么是私有化?二、私有化的处理-装饰器三. 继承的案例四 继承的顺序五 工资案例 前言 本文主要介绍私有化的属性 提示:以下是本篇文…

Python基础教程—私有化

一、私有化 1、定义 (1)私有化 如果想让类的内部属性不被外界直接访问,可以在这个属性的前面加两个下划线__ ,在 Python中,如果一个属性的前面出现 __,就表示这个属性只能在当前类的方法中被直接访问,不能通过对象直…

JavaScript 《公司开发功能》 99+ 大合集

​前期回顾 ​ Vue项目实战 —— 后台管理系统( pc端 ) 第三篇_0.活在风浪里的博客-CSDN博客mock模拟数据、折线图、柱状图、饼图,一遍就懂!!~https://blog.csdn.net/m0_57904695/article/details/124861409?spm1001.2014.3001.5501 目…

【HDOJ】3275 Light

这就是个简单线段树延迟标记。因为对bool使用了~而不是&#xff01;&#xff0c;wa了一下午找不到原因。 1 /* 3275 */2 #include <iostream>3 #include <sstream>4 #include <string>5 #include <map>6 #include <queue>7 #include <set>…

CSS基础(待完整)——css简介、css基础选择器、字体属性、css文本属性、css引入方式、Emmet语法、css复合选择器、元素显示器、背景、三大特性、盒子模型

文章目录 CSS简介CSS语法规范CSS代码风格样式格式书写样式大小写空格规范 CSS基础选择器CSS选择器的作用选择器分类标签选择器类选择器类选择器-多类名id选择器通配符选择器 字体属性字体系列字体大小字体粗细文字样式字体复合属性 CSS文本属性文本颜色对齐方式装饰文本文本缩进…