python基础之面向对象基础语法

news2024/11/28 12:30:45

文章目录

  • 一、面向对象基础语法
    • 1.dir内置函数:
    • 2.定义一个简单的类(只包含方法):
  • 二、实例演练
    • 3.面对对象练习:小明爱跑步
      • 需求:
    • 4.摆放家具练习:
    • 5.士兵突击,
      • 需求:
    • 6.私有属性和方法:
  • 三、伪私有属性和私有方法(科普)
    • python中没有真正意义的私有;

一、面向对象基础语法

1.dir内置函数:

在这里插入图片描述

2.定义一个简单的类(只包含方法):

类可以只有一个但是使用相同的类可以创建不同的对象;

二、实例演练

3.面对对象练习:小明爱跑步

需求:

1.小明体重75.0公斤;
2.小明每次跑步都会减肥0.5公斤;
3.小明每次吃东西体重增加1公斤;
class Person:
def init(self,name,weight):
self.name=name
self.weight=weight
def str(self):
return “我的名字叫%s体重是%.2f公斤”%(self.name,self.weight)
def run(self):
print(“%s爱跑步,跑步锻炼身体”%self.name)
self.weight-=0.5
def eat(self):
print(“%s是吃货,吃完这顿再减肥”%self.name)
self.weight+=1
xiaoming=Person(“小明”,75.0)
xiaoming.run()
xiaoming.eat()
print(xiaoming)
xiaomei=Person(“小美”,45)
xiaomei.eat()
xiaomei.run()
print(xiaomei)
print(xiaoming)

class Person:
    def __init__(self,name,weight):
        self.name=name
        self.weight=weight
    def __str__(self):
        return "我的名字叫%s体重是%.2f公斤"%(self.name,self.weight)
    def run(self):
        print("%s爱跑步,跑步锻炼身体"%self.name)
        self.weight-=0.5
    def eat(self):
        print("%s是吃货,吃完这顿再减肥"%self.name)
        self.weight+=1
xiaoming=Person("小明",75.0)
xiaoming.run()
xiaoming.eat()
print(xiaoming)
xiaomei=Person("小美",45)
xiaomei.eat()
xiaomei.run()
print(xiaomei)
print(xiaoming)


在这里插入图片描述

4.摆放家具练习:

1、房子有户型、总面积和家具名称列表(新房子没有任何家具);
2、家具有名字和占地面积,其中席梦思占地4平米,衣柜占地2平米,餐桌占地1.5平米;
3、将以上三件家具添加到房子中;
4、打印房子时要求输出:户型、总面积、剩余面积、家具名称列表;
class HouseItem:
def init(self,name,area):
self.name=name
self.area=area
def str(self):
return “[%s]占地%.2f”%(self.name,self.area)

#再定义类,类与类之间要保留两行空行
class House:
def init(self,house_type,area):
self.house_type=house_type
self.area=area
self.free_area=area
self.item_list=[]
def str(self):
#python能够自动将一对括号内部的代码连在一起
return (“户型:%s\n总面积:%.2f[剩余:%.2f]\n家具:%s”
%(self.house_type,self.area,
self.free_area,self.item_list))
def add_item(self,item):
print(“要添加%s”%item)
if item.area>self.free_area:
print(“%s的面积太大了,无法添加”%item.name)
return
self.item_list.append(item.name)
self.free_area-=item.area
bed=HouseItem(“席梦思”,4)
chest=HouseItem(“衣柜”,2)
table=HouseItem(“餐桌”,1.5)
print(bed)
print(chest)
print(table)
my_home=House(“两室一厅”,60)
my_home.add_item(bed)
my_home.add_item(chest)
my_home.add_item(table)
print(my_home)

class HouseItem:
    def __init__(self,name,area):
        self.name=name
        self.area=area
    def __str__(self):
        return "[%s]占地%.2f"%(self.name,self.area)

#再定义类,类与类之间要保留两行空行
class House:
    def __init__(self,house_type,area):
        self.house_type=house_type
        self.area=area
        self.free_area=area
        self.item_list=[]
    def __str__(self):
        #python能够自动将一对括号内部的代码连在一起
        return ("户型:%s\n总面积:%.2f[剩余:%.2f]\n家具:%s"
                %(self.house_type,self.area,
                  self.free_area,self.item_list))
    def add_item(self,item):
        print("要添加%s"%item)
        if item.area>self.free_area:
            print("%s的面积太大了,无法添加"%item.name)
            return
        self.item_list.append(item.name)
        self.free_area-=item.area
bed=HouseItem("席梦思",4)
chest=HouseItem("衣柜",2)
table=HouseItem("餐桌",1.5)
print(bed)
print(chest)
print(table)
my_home=House("两室一厅",60)
my_home.add_item(bed)
my_home.add_item(chest)
my_home.add_item(table)
print(my_home)

在这里插入图片描述
在这里插入图片描述

5.士兵突击,

需求:

1.士兵许三多有一把AK47;
2.士兵可以开火;
3.枪能够发射子弹;
4.枪能够装填子弹——增加子弹数量;(一个对象的属性可以是另一个类创建时的对象)
class Gun:
def init(self,model):
self.model=model
self.bullet_count=0
def add_bullet(self,count):
self.bullet_count+=count
def shoot(self):
if self.bullet_count<=0:
print(“[%s]没有子弹了”%self.model)
return
self.bullet_count-=1
print(“[%s]突突突,剩余【%d】发子弹”%(self.model,self.bullet_count))

class Soldier:
def init(self,name):
self.name=name
self.gun=None
def fire(self):
if self.gun==None:
print(“[%s]还没有枪”%self.name)
return
print(“冲啊【%s】”%self.name)
self.gun.add_bullet(50)
self.gun.shoot()
ak47=Gun(“AK47”)
xusanduo=Soldier(“许三多”)
xusanduo.gun=ak47
xusanduo.fire()

class Gun:
    def __init__(self,model):
        self.model=model
        self.bullet_count=0
    def add_bullet(self,count):
        self.bullet_count+=count
    def shoot(self):
         if self.bullet_count<=0:
             print("[%s]没有子弹了"%self.model)
             return
         self.bullet_count-=1
         print("[%s]突突突,剩余【%d】发子弹"%(self.model,self.bullet_count))


class Soldier:
    def __init__(self,name):
        self.name=name
        self.gun=None
    def fire(self):
        if self.gun==None:
            print("[%s]还没有枪"%self.name)
            return
        print("冲啊【%s】"%self.name)
        self.gun.add_bullet(50)
        self.gun.shoot()
ak47=Gun("AK47")
xusanduo=Soldier("许三多")
xusanduo.gun=ak47
xusanduo.fire()

在这里插入图片描述

6.私有属性和方法:

class Women:
def init(self,name):
self.name=name
self.__age=18#age前面增加两个下划线即变为私有属性;
def secret(self):
print(“%s的年龄是%d”%(self.name,self.__age))
def __secret(self):
print(“hello”)
xiaofang=Women(“小芳”)
#私有属性在外部不能被直接访问
#print(xiaofang.__age)
#在对象的方法内部可以访问对象的私有属性
xiaofang.secret()
#私有方法同样不能在外面被直接访问
#xiaofang.__secret()

class Women:
    def __init__(self,name):
        self.name=name
        self.__age=18#age前面增加两个下划线即变为私有属性;
    def secret(self):
        print("%s的年龄是%d"%(self.name,self.__age))
    def __secret(self):
        print("hello")
xiaofang=Women("小芳")
#私有属性在外部不能被直接访问
#print(xiaofang.__age)
#在对象的方法内部可以访问对象的私有属性
xiaofang.secret()
#私有方法同样不能在外面被直接访问
#xiaofang.__secret()

在这里插入图片描述

三、伪私有属性和私有方法(科普)

在日常生活中,不要使用这种方法,访问对象的私有属性或私有方法;

python中没有真正意义的私有;

1.在给属性或方法命名时,实际是对名称做了特殊处理,使得外界无法访问到;
2、处理方式:在名称前面加上_类名=>_类名_名称
class Women:
def init(self,name):
self.name=name
self.__age=18#age前面增加两个下划线即变为私有属性;
def secret(self):
print(“%s的年龄是%d”%(self.name,self.__age))
def __secret(self):
print(“hello”)
xiaofang=Women(“小芳”)
#私有属性在外部不能被直接访问
print(xiaofang._Women__age)
#在对象的方法内部可以访问对象的私有属性
xiaofang.secret()
#私有方法同样不能在外面被直接访问
#xiaofang.__secret()

class Women:
    def __init__(self,name):
        self.name=name
        self.__age=18#age前面增加两个下划线即变为私有属性;
    def secret(self):
        print("%s的年龄是%d"%(self.name,self.__age))
    def __secret(self):
        print("hello")
xiaofang=Women("小芳")
#私有属性在外部不能被直接访问
print(xiaofang._Women__age)
#在对象的方法内部可以访问对象的私有属性
xiaofang.secret()
#私有方法同样不能在外面被直接访问
#xiaofang.__secret()

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CDN技术介绍

引言 随着Internet技术和多媒体技术的不断发展&#xff0c;图像、音频、视频服务所占的比重越来越大&#xff0c;加之网民数量激增&#xff0c;网络访问距离过长&#xff0c;导致网络负载迅速增加&#xff0c;从而使用户的访问质量受到严重影响。传统的缓存技术对交互性强和比…

【ML特征工程】第 9 章 :回到特征:构建学术论文推荐器

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

算法leetcode|17. 电话号码的字母组合(rust重拳出击)

文章目录17. 电话号码的字母组合&#xff1a;样例 1&#xff1a;样例 2&#xff1a;样例 3&#xff1a;提示&#xff1a;原题传送门&#xff1a;分析题解rustgocjavatypescriptpython17. 电话号码的字母组合&#xff1a; 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有…

向NS-3添加新模块_ns3.35添加新模块_ns3.35以及更早版本添加新模块

2022年11月&#xff0c;ns3官网发布了3.37版本&#xff0c;与3.36一样&#xff0c;运行、编译、配置的时候使用的都是ns3.37/ns3 这个脚本&#xff0c;但3.35以及3.35以前的版本使用的都是ns3.35/waf脚本&#xff0c;相应的3.35以及以前的版本与3.36以后的版本&#xff0c;新生…

Java迭代器 for循环的区别

1、Iterator接口&#xff1a; Iterator接口包含三个方法&#xff1a;hasNext&#xff0c;next&#xff0c;remove Iterator常用于对集合进行 一边遍历一边修改 的操作 注意&#xff1a;当Iterator迭代访问Collection集合中元素时&#xff0c;Collection的元素不能改变&#x…

数据库实践 Hw02

Assignment 02: get familiar with operations in MySQL 创建数据库 创建名字为bank的银行数据库 create database if not exists bank; show create database bank; use bank; show tables;可以获得如下内容 后续展示bank数据库中的tables tables为空 bank数据中创建表…

【Compose】Desktop Application 初尝试

前言 作为一个多年的android开发者&#xff0c;自从Jetpack发布以来&#xff0c;其中的Compose组件就深深的吸引了我&#xff0c;在去年就用新版android studio创建模板尝鲜了一把&#xff0c;不过并没有投入太多时间和精力&#xff0c;其实还有一个消息我没太关注&#xff0c…

算法提升:图的最小生成树算法-克鲁斯卡尔(Kruskal)

目录 概念 思路 代码 概念 克鲁斯卡尔算法查找最小生成树的方法是&#xff1a;将连通网中所有的边按照权值大小做升序排序&#xff0c;从权值最小的边开始选择&#xff0c;只要此边不和已选择的边一起构成环路&#xff0c;就可以选择它组成最小生成树。对于 N 个顶点的连通网…

axios数据交互

目录 一、axios 概念 二、官方文档 三、下载命令 四、特点 五、基本语法 六、基本案例 一、axios 概念 axios 是基于promise创建的http库&#xff0c;可以用于客户端&#xff08;浏览器&#xff09;和 node.js ​ 官方概念&#xff1a; Axios 是一个基于 promise 的 HTT…

面向OLAP的列式存储DBMS-13-[ClickHouse]的MergeTree表引擎原理解析

ClickHouse 中最重要的表引擎&#xff1a;MergeTree 的深度原理解析 首先我们了解了 MergeTree 的基础属性和物理存储结构&#xff1b;接着&#xff0c;依次介绍了数据分区、一级索引、二级索引、数据存储和数据标记的重要特性&#xff1b;最后总结了 MergeTree 上述特性一起协…

C++ Reference: Standard C++ Library reference: C Library: cwctype: iswdigit

C官网参考链接&#xff1a;https://cplusplus.com/reference/cwctype/iswdigit/ 函数 <cwctype> iswdigit int iswdigit (wint_t c); 检查宽字符是否为十进制数字 检查c是否为十进制数字字符。 十进制数字是0 1 2 3 4 5 6 7 8 9中的任意一个。 此函数是isdigit&#xff…

【Web前端基础进阶学习】HTML详解(下篇)

上篇学习到了HTML列表&#xff0c;现在从区块开始学习&#xff01; 一起学习下篇吧! 一.HTML区块 1.HTML区块元素2.HTML内联元素3.HTML的 div 元素4.HTML的 span 元素 二.HTML布局 1.使用div元素添加网页布局2.使用table元素添加网页布局 三.HTML表单和输入 1.文本域2.密码字…

压缩包密码可以删除吗?

压缩包文件设置了密码&#xff0c;但是长时间没有使用&#xff0c;忘记了密码、不能解压压缩包了&#xff0c;还能够删除压缩包密码嘛&#xff1f; 压缩包设置的加密&#xff0c;不需要再加密了&#xff0c;可以删除压缩包密码&#xff0c;以后不需要输入密码再解压密码了&…

11_html

知识点1【HTML概述】 知识点2【文字标签】 知识点3【标题】 知识点4【超链接】 知识点5【table表格标签】&#xff08;重要&#xff09; 知识点6【form表单】&#xff08;重要&#xff09; 知识点7【JavaScript的概述】让网页动起来 1、什么是 Javascript? 2、网页使用j…

【LEACH协议】无线传感器网络LEACH与DEEC协议【含Matlab源码 2187期】

⛄一、 简介 1 引言 WSN 由能感知外部环境的传感器节点以自组网的形式构成&#xff0c;是一种分布式无线传感器网络。随着科技的进步和现代生活的需求&#xff0c;由于 WSN 的远程控制、信息即时传播以及低功耗等众多优点&#xff0c;WSN 在军事医疗、生活娱乐和工业生产等各个…

锦囊秘籍!用Python操作MySQL的使用教程集锦!

一. python操作数据库介绍 大家好&#xff0c;我是毕加锁&#xff08;锁&#xff01;&#xff09;。 Python 标准数据库接口为 Python DB-API&#xff0c;Python DB-API为开发人员提供了数据库应用编程接口。Python 数据库接口支持非常多的数据库&#xff0c;你可以选择适合你…

生产环境 SSH 安全有效小技巧

生产环境使用 SSH 工具的有用技巧 文章目录生产环境使用 SSH 工具的有用技巧生产环境上线时使用瘦客户机多开几个 SSH 窗口短暂离开一个会话时使用反斜杠&#xff08;\&#xff09;开启 SSH 工具的 Log Session 功能总结我们知道&#xff0c;我们学习 IT 技术时自己搭建的环境&…

BufferPool之链表

系列文章目录 MySQL之BufferPool 文章目录系列文章目录前言一、free链表1.1结构简图1.2 结构说明二、flush链表2.1 结构简图2.2 结构说明三、LRU链表3.1 结构简图3.2 LRU优化后结构简图附录前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 本文会介绍fr…

锅炉防磨防爆可视化管理系统

电厂的各类安全事故中&#xff0c;锅炉四管泄爆事故占比最高、影响最大。四管泄漏不仅直接导致停机停炉、引起重大经济损失、威胁电网安全运行、甚至会直接造成机组管理人员的人身伤害。因此锅炉防磨防爆管理工作的好坏是保证机组稳定运行、工作人员安全、电厂整体效益的重要前…

全网最全最深:web前端架构师面试题+缜密全面的学习笔记

都说程序员工资高、待遇好&#xff0c; 2022 金九银十到了&#xff0c;你的小目标是 30K、40K&#xff0c;还是 16薪的 20K&#xff1f;作为一名 Java 开发工程师&#xff0c;当能力可以满足公司业务需求时&#xff0c;拿到超预期的 Offer 并不算难。然而&#xff0c;提升 Java…