Python面向对象二(第十二讲)

在这里插入图片描述

文章目录

  • 知识点
  • 1.私有属性与私有方法
    • 1.私有属性
    • 2.私有方法
  • 2.成员
  • 3.实例属性
    • 1.类属性(静态属性)
    • 2.属性总结
  • 4.实例方法
  • 5.类方法
  • 6.静态方法
  • 7.封装介绍
  • 8.继承(重点)
  • 9.新式类与经典类
    • 练习
  • 10.单继承
    • 1.super()
    • 练习
  • 11.作业

知识点

  • 私有属性与私有方法
  • 成员
  • 属性
  • 方法
  • 封装
  • 继承
  • 多态

1.私有属性与私有方法

    在实际开发中,对象的某些属性或者方法,只希望在对象的内部使用,这时,我们就可以使用私有属性私有方法

1.私有属性

  • 私有属性:就是对象不希望公开的属性
  • 定义方式:在属性名前面增加两个下划线(例如:__name)

    练习

  • 定义类为:"人"类
  • 创建对象:rose
  • 初始化对象属性:name 与 age
  • 要求:age 不能在类的外部访问
class Human:def __init__(self):self.name = 'rose'# 两个下划线,则为私有属性self.__age = 18# 报错:因为定义为私有属性,则在外部无法访问# AttributeError: 'Human' object has no attribute 'age'
rose = Human()
print(rose.name)
print(rose.age)

    需求:一定要在类的外部访问到对象的私有属性,如何实现?

    方法:

  • 可以通过类的内部的方法访问私有属性
class Human:def __init__(self):self.__name = 'rose'# 两个下划线,则为私有属性self.age = 18def __str__(self):print(self.__name)
rose = Human()
rose.__str__()
  • 通过类的内部方法将私有属性返回出去,在类的外部调用该方法并且接收就可
class Human:def __init__(self):self.__name = 'rose'# 两个下划线,则为私有属性def __str__(self):return self.__name
name = Human()
print(name.__str__())

2.私有方法

  • 私有方法:就是对象不希望公开的方法
  • 定义方式:在方法名前面增加两个下划线(例如:__test)

    注意:
在 python 中,并没有真正意义上的私有,只有伪私有。当我们在访问时,以 对象._类名__私有属性 即可访问,私有方法同理。但是不建议使用。

2.成员

在这里插入图片描述

3.实例属性

    实例属性属于对象,只能通过对象访问

  • 定义:self.属性名称
  • 访问:self.属性名称对象.属性名称
        练习:定义一个省份类,打印输出班级每位同学所在的国家与省份。
class Province:def __init__(self, country, province):self.country = countryself.province = provincedef print_def(self):print(self.country, self.province)jeff = Province('中国', '广东')
jeff.print_def() # 中国 广东
amy = Province('中国', '湖南')
amy.print_def() # 中国 湖南

1.类属性(静态属性)

    类属性属于类,保存在类中。在创建时,仅创建一份,并且所有对象都共享静态属性。执行时可以是类访问也可以是对象访问。

  • 定义:直接在类中定义
  • 访问:类名.属性名称 或 self.属性名称 或 对象.属性名称
class Province:country = '中国' # 静态属性def __init__(self, province):self.countryself.province = provincedef print_def(self):print(self.country, self.province)jeff = Province( '广东')
jeff.print_def()  # 中国 广东
amy = Province( '湖南')
amy.print_def()  # 中国 湖南

2.属性总结

    在实际开发中,如果属性的值是固定的,不随对象的改变而改变。那就使用静态属性(类属性),这样有利于节省内存的消耗。而如果属性的值随对象的改变而改变,就使用实例属性。

4.实例方法

    普通方法保存在类中,在实例化对象后,一般通过对象调用。第一个参数必须为系统自建参数,默认为 self,代指对象本身。

class Demo:def __init__(self, name):self.name = '啊巴啊巴'def text(self):print(self.name)
d = Demo('Jeff')
d.text()

    注意:

  • 当需要在方法中使用实例属性时,通常使用实例方法
  • self 仅仅是变量名。使用其它也可,但最好不要修改

5.类方法

    类方法通过在方法上面添加@classmethod 装饰器,保存在类中;

class Abc:def abc(self):pass@classmethoddef bnc(cls): # 自建参数为cls,指当前的类pass

    注意:

  • 类方法不需要传入self。但有一个系统自建参数为cls,cls代指类本身;
  • 类方法一般通过类调用,也可通过对象调用

6.静态方法

    静态方法通过在方法上面添加 @staticmethod 装饰器定义,保存在类中;

import time
# 导入时间模块
class ShowTime:@staticmethod # 静态方法def time_1(): # 静态方法不需要传入selfprint(time.strftime('%Y:%m:%d',time.localtime()))# 2021: 01:26sj = ShowTime()
sj.time_1()

    注意:

  • 静态方法不需要传入self参数,即使传入了self参数也并不像普通方法那样代指对象本身,仅仅是一个普通的形参。
  • 静态方法的调用虽然可以通过对象调用,但一般由类调用。
  • 静态方法的参数并不代表对象这一特点,使静态方法在类中使用起来更像一个单纯的函数。完全可以将静态方法放在类的外部,当成函数使用。但是放在类中,便于使用与维
    护。

7.封装介绍

    封装是面向对象编程的一大特点,将属性和方法放到类的内部,通过对象访问属性或者方法,隐藏功能的实现细节,也可以设置访问权限。

class Student:def __init__(self, name, age): # 将属性封装到类的内部self.name = nameself.age = agedef print_text(self):print(self.name, self.age)
yu = Student('屿', 18)
yu.print_text() # 屿 18
# 在同一个类,创建多个对象之间互不干扰
ywyg = Student('屿我有关', 18)
ywyg.print_text() # 屿我有关 18

8.继承(重点)

    继承是一种创建新类的方式,如果子类需要复用父类的属性或者方法时,就可以使用继承。当然,子类也可以提供自己的属性和方法。

class Father:pass
class Son(Father):pass

    注意:

  • 在 python 中,新建的类可以继承一个或多个父类
  • 继承作用:避免重复造轮子,减少代码的冗余
class Father:def chi(self):print('吃')
class Son(Father):def he(self):print('喝')
jc = Son()
jc.chi() # 吃

    由此可见,我调用的子类中并没有 ‘吃’ 这个代码,但是却可以在父类中继承。

9.新式类与经典类

    在 Python2 当中类分为新式类和经典类,如果有继承父类 object 则是新式类,否则为经典类。

class Demo(object): # 新式类pass
class Demo: # 经典类pass

    但是在 Python3 当中,全部都是新式类,默认继承 object。

练习

    验证 Python3 中,全部都是新式类
    实现思路:比较继承与无继承两个空类的成员是否一致拓展方法:

  • 对象.dir() 查看对象的属性与方法
class Demo1:pass
class Demo2(object):pass
d1 = Demo1()
d2 = Demo2()
print(d1.__dir__())
print(d2.__dir__())

10.单继承

    子类继承父类,则可以直接享受父类中已经封装好的方法

class Father:pass
class Son(Father):pass

    当对象调用方法时,查找顺序先从自身类找,如果自身没找到,则去父类找,父类无,再到父类的父类找,直到object类,若还无,则报错。这也称为深度优先机制
在这里插入图片描述
    需要注意的是,当子类与父类拥有同名称的方法时,子类对象调用该方法优先执行自身的方法。那么实际上是子类的方法覆盖父类的方法,也称为重写

class Father:def shui(self):print('父亲睡')
class Son(Father):def shui(self):print('儿子睡')
son = Son()
son.shui() # 儿子睡

    但是实际的开发中,遵循开放封闭原则。我们并不会完全的重写父类的方法,而是希望同时实现父类的功能。这时,我们就需要调用父类的方法了,可以通过 super()函数实现。
    注意:

  • __init__方法也会继承,同实例方法一致
  • 私有属性以及私有方法没有被继承

1.super()

    super(type[, object-or-type]) 函数是用于调用父类(超类)的一个方法

  • type --> 类
  • object-or-type --> 对象或类,一般是 self

练习

  •     用代码实现如下:
    在这里插入图片描述
class GrandFather:def shui(self):print('睡')
class Father(GrandFather):def chi(self):print('吃')def he(self):print('喝')
class Son(Father):def xue(self):print('学python')
son = Son()
son.xue() # 学python
son.he() # 喝
son.chi() # 吃
son.shui() # 睡
  • 继以上练习实现,在Son的sleep方法当中,调用父类的sleep方法。
class Father:def shui(self):print('父亲睡')
class Son(Father):def shui(self):print('儿子睡')super().shui()
son = Son()
son.shui() 
# 儿子睡
# 父亲睡

11.作业

  • 作业1
        玩个特别无聊的游戏,猜数字。玩家输入一个数字与计算机随机生成的数字作对比当两个值相等时,则说明用户猜对了
        注意: 外部不能获取到计算机随机生成的值
import random
class GuessNumber(object):def __init__(self):self.__i = random.randint(0, 10)def guess(self):num = int(input('请输入一个0-10的整数'))# print('猜对了' if self.__i == num else '错了错了')# print(f'私有属性{self.__i}')while True:if self.__i == num:print('答对了')breakelse:num = int(input('猜的不对哦,请重新输入:'))guess_1 = GuessNumber()
guess_1.guess()
  • 作业2
    创建一个煎饼类 调用烹饪时长的方法累计煎饼状态
  • 如果煎的时间在0-3之间则状态为生的
  • 如果煎的时间在3-5之间则状态为半生不熟的
  • 如果煎的时间在5-8之间则状态为全熟的
  • 当时间超过8分钟状态焦了
  • 并且还可以给煎饼添加作料,比如大葱(hhh),大蒜(hhh)?,烤肠等等
class Pancake(object):def __init__(self):self.pancake_time = 0self.status = '生的'self.seasoning = []def __str__(self):return f'煎饼的时间为{self.pancake_time},煎饼的状态为{self.status},加的料是{self.seasoning}'def pancake_status(self, cook_time):self.pancake_time += cook_timeif self.pancake_time >= 0 and self.pancake_time < 3:self.status = '生的'elif self.pancake_time >= 3 and self.pancake_time < 5:self.status = '半生不熟'elif self.pancake_time >= 5 and self.pancake_time < 8:self.status = '全熟'elif self.pancake_time >= 8:self.status = '焦了'def pancake_seasoning(self, seasoning):self.seasoning.append(seasoning)jianbing = Pancake()
jianbing.pancake_status(1)
jianbing.pancake_seasoning('一根香肠,两个蛋')
print(jianbing)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/26546.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

常用设计模式系列(十)—装饰者模式

第一节 前言 各位好&#xff0c;首先我要先恭喜下自己粉丝即将破百&#xff0c;也谢谢各位的捧场&#xff0c;不过也跟我自己的努力密不可分&#xff0c;我也要继续加油&#xff0c;输出更好的文章来回报大家&#xff0c;也希望大家多提建议&#xff0c;有问题我也会及时改进。…

摆摊计划1(万一以后找不到工作)

货源&#xff1a;阿里巴巴正规平台 卖炸串 硬件&#xff1a; 多功能烤肠机 购买链接&#xff1a;脆皮烤肠机燃煤气商用油炸锅商用摆摊热狗机肠机关东煮组合机批发 (1688.com) 成本&#xff1a;379.6元 食材&#xff1a; 淀粉肠&#xff08;100支试水&#xff09;&#xff…

TCP/IP协议

✏️作者&#xff1a;银河罐头 &#x1f4cb;系列专栏&#xff1a;JavaEE &#x1f332;“种一棵树最好的时间是十年前&#xff0c;其次是现在” 目录 TCP/IP协议应用层协议自定义应用层协议DNS 传输层协议端口号UDP协议UDP协议端格式 TCP协议TCP协议段格式TCP工作机制确认应答…

基于HTML+CSS+JavaScript制作美食文化网站 ——卡通创意的烧烤(5个页面) html静态网页设计制作 dw静态网页成品模板素材网页 web前端网页设计与制作 div静态网页设计

&#x1f468;‍&#x1f393;静态网站的编写主要是用HTML DIVCSS JS等来完成页面的排版设计&#x1f469;‍&#x1f393;,常用的网页设计软件有Dreamweaver、EditPlus、HBuilderX、VScode 、Webstorm、Animate等等&#xff0c;用的最多的还是DW&#xff0c;当然不同软件写出的…

c语言-喝饮料问题

/* 喝饮料问题&#xff1a; 1瓶饮料1元&#xff0c;2个空瓶可以换一瓶饮料&#xff0c;给20元&#xff0c;可以喝多少饮料 */#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h>int main() {int man 0, kong 0, sum 0;man 20; //一开始可以买的饮料数sum 0; /…

如何完美吃下二叉树?——二叉树练习题

文章目录 开胃前菜 基础概念选择题主菜 二叉树oj题1.单值二叉树题目思路1代码思路2代码递归展开图 2. 检查两颗树是否相同题目代码 3. 对称二叉树题目思路代码 4. 二叉树的前序遍历题目代码 5. 另一颗树的子树思路代码 6.二叉树遍历题目代码 7.二叉树的层序遍历准备环节代码实现…

动物园游记

这是学习笔记的第 1887 篇文章 今天本来打算去科技馆&#xff0c;结果发现就今天闭馆&#xff0c;真是不巧&#xff0c;于是改换了方向去了北京动物园。 早两年说动物园&#xff0c;基本都和服装批发能联系起来&#xff0c;我是纯粹的去看动物的。确切的说是陪孩子去看动物的。…

【Java核心技术卷】I/O详析

文章目录 概述Java io基本概念关于流流的分类 Java io框架一、以字节为单位的输出流的框架图&#xff08;1&#xff09;框架图图示&#xff08;2&#xff09;OutputStream详解&#xff08;3&#xff09;OutputStream子类&#xff08;4&#xff09;引申&#xff1a;打印流 二、以…

深圳-上海-呼伦贝尔-漠河-哈尔滨环行手记

C语言的精髓是指针&#xff0c;这是手艺人的小幸运&#xff0c;但这是程序员的悲哀。 今年&#xff08;2018年春节前&#xff09;的假期比较特殊&#xff0c;我这一出去就是20多天&#xff0c;请了十来天的年假…1月27号就出发离开深圳了&#xff0c;考虑到1月25号和1月26号两天…

魔幻的2020,对我来说却是逐渐觉醒的一年

2020年的最后一天&#xff0c;按照惯例总结一下成果&#xff0c;同时也制定一下来年的目标&#xff0c;每年不总得给自己立几个flag。 关于公众号 先说公众号&#xff0c;其实开通了很多年&#xff0c;直到今天&#xff0c;还差一百多粉丝才突破一万&#xff0c;这样的成绩算…

美团 大规模商品知识图谱的构建与应用

作者 | 曹雪智博士 美团 技术专家 来源 | DataFunTalk 在互联网新零售的大背景下&#xff0c;商品知识图谱作为新零售行业数字化的基石&#xff0c;提供了对于商品相关内容的立体化、智能化、常识化的理解&#xff0c;对上层业务的落地起到了至关重要的作用。 相比于美团大脑中…

连投两笔,低温预制烤肠为何成为小红书的“心头爱”?

近年来&#xff0c;随着人们生活水平的不断提高和生活节奏的加快&#xff0c;消费者的食品消费观念已经从最初的满足于温饱发展成为追求高品质的消费&#xff0c;对食品健康、质量和用餐效率等提出新要求&#xff0c;低温预制食品的需求不断提升。 根据 Frost & Sullivan&…

基于JAVA的网上水果生鲜超市商城SSM【数据库设计、论文、源码、开题报告】

叿狆号:“IT软件学习社” 主要使用技术 springspringmvcmybatisjspmysqltomcat 功能介绍 &#xff08;1&#xff09;登录注册功能&#xff1a;用户打开系统&#xff0c;浏览挑选生鲜&#xff0c;在购买生鲜之前&#xff0c;要进行注册登录&#xff0c;保证一人一个账号&…

路边2元一根的烤肠,里面究竟是什么肉?

放学之后&#xff0c;下班之余&#xff0c;大家有没有被路边滩上红彤彤、2元一根的烤肠&#xff08;热狗&#xff09;所吸引&#xff1f;那个扑鼻香味&#xff0c;能让你瞬间流口水有没有&#xff1f; 可是&#xff0c;单纯的你有没有想过&#xff0c;这些看上去就很美味的烤肠…

泰酷辣!有人把 81 个国内大模型汇总在一张图里!

在科技的世界里&#xff0c;一场革命正在悄然进行。这场革命的主角&#xff0c;就是我们今天要讲的“大模型”。这些大模型&#xff0c;就像一群巨人&#xff0c;正在各个领域中挥舞着他们的力量&#xff0c;引领着一场前所未有的技术变革。 在国内&#xff0c;这场大模型的研发…

Python 吞噬世界,GPT 吞噬 Python!ChatGPT 上线最强应用:分析数据、生成代码都精通

当地 7 月 7 日&#xff0c;OpenAI 在社交平台表示&#xff0c;将向所有 ChatGPT Plus 用户开放代码解析器&#xff08;Code Interpreter&#xff09;功能。消息一出便瞬间引发了开发者们的广泛关注&#xff0c;该功能被有的开发者认为是自 OpenAI 发布 GPT-4 以来最强大的功能…

GPT-4 终于开放了!

2023年&#xff0c;OpenAI的ChatGPT已经成为了一个不可忽视的存在。作为一种基于GPT模型的聊天机器人&#xff0c;ChatGPT在过去的一年多时间里里取得了令人瞩目的进步。从最初的简单问答&#xff0c;到现在能够进行深度对话&#xff0c;甚至可以执行代码&#xff0c;ChatGPT的…

draw.io和plantuml替代visio画图工具

目录 1.drawio <1>.Chrome plugin <2>.网址访问 <3>.draw.io快捷键 2.plantuml开源工具 <1>.网址 1.drawio <1>.Chrome plugin name&#xff1a;Diagrams for Confluence 跨平台&#xff0c;免费,在线画图。替代visio。<2>.网址访…

如何将simulink的图像导出到VISIO中

平时&#xff0c;我们在Simulink中获得的图像&#xff0c;有时需要进行修改&#xff0c;或者说图像大小比较大&#xff0c;在Simulink中操作起来比较卡。这时我们就需要将Simulink的图像导出出到Visio中。 首先&#xff0c;通过仿真&#xff0c;得到SCOPE图像&#xff0c;打开…

Visio画代码调用图

为什么一定要用上面的这个基本形状&#xff1f;而不是自己拖一个长方形出来&#xff1f;接下来就显示出优势了&#xff0c;可以很方便地连接在中点处&#xff0c;强迫症友好。 如果用长方形&#xff0c;就不能很准确地连接。 画起来真的很需要耐心&#xff0c;我放弃了 成品…