Python---继承与多态

news/2024/11/17 19:50:36/

Python从入门到高手(内部资源-配学习资料)_哔哩哔哩_bilibili

# 私有化
# 封装:1.私有化属性  2.定义公有set和get方法
# __属性:就是将属性私有化,访问范围仅仅限于类中
'''
1.隐藏属性不被外界随意修改
2.可以修改:通过函数def setXXX(self,XXX):3.筛选赋值内容if XXX是符合条件赋值else:不赋值
3.如果想获取某一个属性使用get函数def getXXX(self):return self.__XXX
'''class Student:__age = 18  # 类属性def __init__(self, name, age):self.__name = name  # 长度必须6位self.__age = ageself.__score = 25# 定义公有set(赋值)和get(取值)方法def setAge(self, age):if age > 0 and age < 120:self.__age = ageelse:print('年龄不在规定的范围内')def getAge(self):return self.__age# 修改名字的时候,长度必须6位def setName(self, name):if len(name) == 6:self.__name = nameelse:print('长度不是6位')def getName(self):return self.__namedef __str__(self):return '姓名:{},年龄:{},考试分数:{}'.format(self.__name, self.__age, self.__score)yupeng = Student('yupeng', 18)
print(yupeng)yupeng.age = 21
yupeng.__score = 95  # 赋值不成功
print(yupeng)
yupeng.setAge(50)
print(yupeng.getAge())-----------------------------------------------------------------------------------
class Student:__age = 18  # 类属性def __init__(self, name, age):self.__name = name  # 长度必须6位self.__age = ageself.__score = 25# 定义公有set(赋值)和get(取值)方法def setAge(self, age):if age > 0 and age < 120:self.__age = ageelse:print('年龄不在规定的范围内')def getAge(self):return self.__age# 修改名字的时候,长度必须6位def setName(self, name):if len(name) == 6:self.__name = nameelse:print('长度不是6位')def getName(self):return self.__namedef __str__(self):return '姓名:{},年龄:{},考试分数:{}'.format(self.__name, self.__age, self.__score)# attribute: setName  getName  __str__  __init__yupeng = Student('yupeng', 18)
print(yupeng)print(dir(Student))
print(dir(yupeng))
print(yupeng._Student__age)  # 伪私有,其实就是__age,只不过系统自动改名字了

------------------------------------------------------------------------------------------------------------------

#  在开发中看到一些私有化处理:装饰器
class Student:__age = 18  # 类属性def __init__(self, name, age):self.name = name  # 长度必须6位self.__age = age# 定义公有set(赋值)和get(取值)方法# 老版# def setAge(self, age):#     if age > 0 and age < 120:#         self.__age = age#     else:#         print('年龄不在规定的范围内')## def getAge(self):#     return self.__age# 先有getXXX,再有set,get依赖于set@propertydef age(self):return self.__age@age.setterdef age(self, age):if age > 0 and age < 120:self.__age = ageelse:print('年龄不在规定的范围内')def __str__(self):return '姓名:{},年龄:{},考试分数:{}'.format(self.__name, self.__age, self.__score)s = Student('peng', 20)s.name = 'xiaopeng'
s.age = 30
print(s.name)
print(s.age)# 私有化赋值
# s.setAge(30)
# print(s.getAge())

-----------------------------------------------------------------------------------------------------------------

# 继承:is a, has a
'''
公路(Road):属性:公路名称,公路长度
车(Car):属性:车名,时速方法:1.求车名在那条公路上以多少的时速行驶多长,get_time(self,rood)2.初始化车属性信息__init__方法3.打印对象显示车的属性信息
'''
import randomclass Road:def __init__(self, name, len):self.name = nameself.len = lenclass Car:def __init__(self, brand, speed):self.brand = brandself.speed = speeddef get_time(self, road):  # road与r指向同一个空间地址ran_time = random.randint(1, 10)msg = '{}品牌的车在{}上以{}速度行驶{}小时'.format(self.brand, road.name, self.speed, ran_time)print(msg)def __str__(self):return '{}品牌的,速度:{}'.format(self.brand, self.speed)#  创建实例化对象
r = Road('京藏高速', 12000)  # road与r指向同一个地址空间
audi = Car('奥迪', 120)
r.name = '京哈高速'
print(audi)
audi.get_time(r)  # 对象

------------------------------------------------------------------------------------------------------------

'''
知识点:
1.has a
一个类中使用了另外一种自定义的类型student使用computer book2.类型
系统类型
str int float
list dict tuple set
自定义类型:
算是自定义的类,都可以将其当成一种类型
s=Student
s是Student类型的对象
'''class Computer:def __init__(self, brand, type, color):self.brand = brandself.type = typeself.color = colordef online(self):print('正在使用电脑上网...')def __str__(self):return self.brand + '---' + self.type + '---' + self.colorclass Book:def __init__(self, bname, author, number):self.bname = bnameself.author = authorself.number = numberdef __str__(self):return self.bname + '---' + self.author + '---' + str(self.number)class Student:def __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:  # book就是一个book对象print(book.bname)def __str__(self):return self.name + '---' + str(self.computer) + '---' + str(self.books)computer = Computer('Dell', 'R14', 'black')
book = Book('盗墓笔记', '南派三叔', 10)
stu = Student('songsong', computer, book)
print(stu)
# 看借了哪些书
stu.show_book()
book1 = Book('鬼吹灯', '天下霸唱', 8)
stu.borrow_book(book1)
stu.show_book()

------------------------------------------------------------------------------------------------

# is a   base  父类 基类
# Exception
'''
继承:
Student,Employee,Doctor ------》都属于人类
相同代码---》代码冗余,可读性不高将相同代码提取---》Person类
Student,Employee,Doctor---》继承Personclass Student(Person):pass
'''class Person:def __init__(self, name, age):self.name = '匿名'self.age = 18def eat(self):print(self.name + '正在吃饭。。。')def run(self):print(self.name + '正在跑步。。。')class Student(Person):def __init__(self, name, age):# 调用父类的__init__super().__init__(name, age)  # super() 父类对象print('------>student的init')class Employee(Person):passclass Doctor(Person):passs = Student('renwen', 18)
s.run()# e = Employee()
# d = Doctor()

-----------------------------------------------------------------------------------------------

'''
特点:
1.如果类中不定义__init__,调用父类super class的__init__
2.如果类继承父类也需要定义自己的__init__,就需要在当前类的__init__调用一下父类__init__
3.如何调用父类__init__:super().__init__:super().__init__(参数)super(类名,对象).__inint(参数)
4.如果父类有eat(),子类也定义一个eat方法,默认搜索的原则:先找当前类,再去找父类s.eat()override:重写(覆盖)父类提供的方法不能满足子类的需求,就需要在子类中定义一个同名的方法,这种行为:重写
5.子类的方法也可以调用父类方法:super().方法名(参数)
'''class Person:def __init__(self, name, age):self.name = nameself.age = agedef eat(self):print(self.name + '正在吃饭。。。')def run(self):print(self.name + '正在跑步。。。')class Student(Person):def __init__(self, name, age, clazz):# 调用父类的__init__super().__init__(name, age)  # super() 父类对象self.clazz = clazzprint('------>student的init')def study(self, course):print('{}正在学习{}课程'.format(self.name, course))def eat(self, food):super.eat()print(self.name + '在吃狮子头盖饭' + food)class Employee(Person):def __init__(self, name, age, salary, manager):super().__init__(name, age)self.salary = salaryself.manager = managerclass Doctor(Person):def __init__(self, name, age, patients):super(Doctor, self).__init__(name, age)self.patients = patientss = Student('jack', 18, 'python1905')
s.study('python')
s.eat('鱼香肉丝')e = Employee(name='tom', age=25, salary=10000, manager='king')lists = ['zhangsan', 'lisi', 'wangwu', 'zhaoliu']
d = Doctor('lucy', 30, lists)

----------------------------------------------------------------------------------------------

# class Person:
#     def __init__(self, name):
#         self.name = name
#
#     def eat(self):
#         print('------>eat1')
#
#     def eat(self, food):
#         print('------>eat', food)
#
#
# p = Person('jack')
# p.eat('狮子头')class Base:def test(self):print('------Base------')class A(Base):def test(self):print('------>AAAAAA')class B(Base):def test1(self):print('------>BBBBBB')class C(Base):def test2(self):print('------>CCCCCC')class D(A, B, C):passd = D()
d.test()import inspectprint(inspect.getmro(D))'''
python允许多继承,
def 子类(父类1,父类2,...):pass
如果父类中有相同名称的方法
'''

-----------------------------------------------------------------

#  多继承的搜索顺序:经典类 新式类class P1:def foo(self):print('p1--->foo')def bar(self):print('p1--->bar')class P2:def foo(self):print('p2--->foo')class C1(P1, P2):passclass C2(P1, P2):def bar(self):print('C2--->bar')class D(C1, C2):passd = D()
d.foo()# 广度优先

------------------------------------------------------------------------------------------

# 多态 封装 继承----》面向对象
class Person:def __init__(self, name):self.name = namedef feed_pet(self, pet):  # pet既可以接收cat,也可以接收dog,还可以接收tiger#  isinstance(obj,类)  ------》 判断obj是不是类的对象或者判断obj是不是该类子类的对象if isinstance(pet, Pet):print('{}喜欢养宠物:{},昵称是:{}'.format(self.name, pet.role, pet.nickname))else:print('不是宠物类型的。。。')class Pet:role = 'Pet'def __init__(self, nickname, age):self.nickname = nicknameself.age = agedef show(self):print('昵称:{},年龄:{}'.format(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('大黄', 4)
tiger = Tiger()
person = Person('家伟')
person.feed_pet(cat)
person = Person('pengpeng')
person.feed_pet(tiger)'''
pet 父类             cat   dog子类
pet 大类型           cat   dog小类型
'''

-----------------------------------------------------------------------------------------


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

相关文章

Python面向对象之私有化属性

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

Python基础教程—私有化

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

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

​前期回顾 ​ Vue项目实战 —— 后台管理系统( pc端 ) 第三篇_0.活在风浪里的博客-CSDN博客mock模拟数据、折线图、柱状图、饼图&#xff0c;一遍就懂&#xff01;&#xff01;~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文本属性文本颜色对齐方式装饰文本文本缩进…

VUE小白学习-官方网站资料学习-2023年5月22日

VUE小白学习-官方网站资料学习-2023年5月22日 VUE干啥的&#xff1f;单文件组件&#xff1f;官方说&#xff0c;VUE前端万金油。 日期&#xff1a;2023年5月22日 VUE干啥的&#xff1f; 是一个前端框架&#xff0c;有自己的一套规则&#xff0c;方便前端开发。 单文件组件&am…

用wordpress建站效果怎么样?WordPress建站的8个主要优点

使用WordPress建站具有许多优势&#xff0c;其效果取决于您的需求、技能水平以及所选择的主题和插件。总体而言&#xff0c;WordPress是一个功能强大且灵活的内容管理系统&#xff0c;可用于创建各种类型的网站&#xff0c;从个人博客和企业网站到电子商务平台和社区论坛。 以下…

从0糖到0防腐剂,元气森林缘何偏向“虎山行”?

【潮汐商业评论/原创】 “一罐橘子汽水&#xff0c;半罐防腐剂”。过去&#xff0c;人们谈防腐剂“色变”&#xff0c;如今却习以为常&#xff0c;因为市面上少有0防腐剂的饮料可以选择。 所以&#xff0c;即便知道长期食用或者过量食用化学合成防腐剂对身体有害——比如饮料…