Python系统学习1-9-类一之类语法

news2025/1/12 1:01:44

一、类之初印象

1、类就是空表格,将变量(列名)和函数(行为)结合起来

2、创建对象,表达具体行

3、创建类就是创建数据的模板

        --操作数据时有提示

        --还能再组合数据的行为

        --结构更加清晰

4、类的内存分配

 5、练习

"""
    参照day08/homework/exercise01
    创建餐厅类
        -- 变量:字典的键
        -- 函数:打印
"""
# 类统一了字典所有key,并提供了相关函数
class Restaurant:
    def __init__(self, city, name="", remark=0, money=0):
        self.city = city
        self.name = name
        self.remark = remark
        self.money = money

    def display(self):
        print("%s在%s地区,点评人数%s,人均消费%s元." % (
            self.name, self.city, self.remark, self.money))

# 创建对象
# --(1)根据实例变量开辟空间
# --(2)执行__init__函数
xqwct = Restaurant("北京", "星期五餐厅", 2847, 180)
tmz = Restaurant("北京","铁木真",3497,104)
print(xqwct.remark)
# 通过对象调用函数,自动将对象作为参数传递给self
xqwct.display() # display(xqwct)
tmz.display()

 二、类语法

(1)类定义

1、代码
class 类名:
    """
    文档说明
    """
    def __init__(self,参数):
     self.实例变量 = 参数
    def 实例方法(self,参数):
        pass
2、说明
        -- 类名所有单词首字母大写
        -- init 也叫构造函数,创建对象时被自动调用,也可以省略。
        -- self 变量绑定的是被创建的对象,名称可以随意 self就是对象
3、实例化
      代码:对象名 = 类名 ( 数据 )
说明:
        -- 对象名存储的是实例化后的对象地址
        -- 类名后面的参数按照构造函数的形参传递(__init__函数)

(2)实例成员

1、实例变量
定义:对象 . 变量名(self.变量名)
调用:对象 . 变量名
说明 通常在构造函数 (__init_) 中创建,首次通过对象赋值为创建,再次赋值为修改.
            每个对象存储一份,通过对象地址访问
__dict__ :对象的属性,用于存储自身实例变量的字典。
2、实例方法

         def 方法名(self,参数):

                方法体(通过“self.变量名"访问实例变量)

调用:对象名.方法名(变量)

说明:至少有一个形参,第一个参数绑定调用这个方法的对象 , 一般命名为self
           无论创建多少对象,方法只有一份,并且被所有对象共享。
# 类中self就是对象名
# 类外自己命名的为对象名
class Epidemic:
    def __init__(self, region):
        # 创建实例变量
        self.region = region
        self.display()
    # 定义实例方法
    def display(self):
        print(self.region)

bj = Epidemic("北京")
bj.display()

# 读取实例变量
print(bj.region)
# python语言将实例变量存入字典
print(bj.__dict__)  # {'region': '北京'}

# Python支持在类外创建实例变量,不建议使用
"""
class Epidemic:
    pass
sh = Epidemic()
sh.region = "上海" # 当前对象有此实例,其他对象无
print(sh.region)
dd = Epidemic()
# print(dd.region) 错误
"""

# 建议在__init__ 中定义实例变量
"""
class Epidemic:
    def set_name(a, name):  # self 可以为任意命名为其他
        # 创建实例变量
        a.name = name
bj = Epidemic()
bj.set_name("北京")
print(bj.name)
print(bj)  # 打印自定义对象,输出为真实内存地址
"""
3、类实例化内存分配

 

 

 (3)跨类调用

 跨类调用语法1:直接创建对象

        语义:XX每次去东北都开一辆新车,因为Car()为局部变量

        通俗:每次用新的

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

    def driver(self):
        print(self.name,"驾驶去东北")
        car = Car()
        car.run()
        
class Car:
    def run(self):
        print("骑车在行驶")


lz = Person("老张")
ll = Person("老李")
lw = Person("老王")

lz.driver()  # 老张驾驶新车去东北
ll.driver()  # 老李驾驶新车去东北
lw.driver()  # 老王驾驶新车去东北
lz.driver()  # 老张驾驶新车去东北
 跨类调用语法2:在构造函数中创建对象

        语义:XX每次去东北都开自己的车,__init__只执行一次

        通俗:每次用旧的

class Person:
    def __init__(self, name):
        self.name = name
        self.car = Car() # 每个对象一个
    def driver(self):
        print(self.name,"驾驶去东北")
        # car = Car() # 多次就是多个
        self.car.run()

class Car:
    def run(self):
        print("骑车在行驶")


lz = Person("老张")  # __init__ 造车,只有一次
lz.driver()
lz.driver()

 跨类调用语法3:通过参数传递对象,建议使用

        语义:XX每次去东北都乘交通工具

        通俗:每次用的时候再选择

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


    def driver(self,vehicle):
        print(self.name,"驾驶去东北")
        vehicle.run()

class Car:
    def run(self):
        print("骑车在行驶")


lz = Person("老张")  # __init__ 造车,只有一次
car = Car()
# 没有定义类时,确定关系
# 而是在用类时,确定关系
lz.driver(car)

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

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

相关文章

为什么我建议机械专业的同学转行嵌入式

最近,我身边有不少机械专业找我,他们对未来的就业形势相当苦恼,觉得自己之后只能进厂打螺丝了。但是我跟他们说,在这个选择比努力重要的时代,只要入对行,谁都可以一飞冲天。 对于学机械的同学,…

mysql 8.0安装

操作系统:22.04.1-Ubuntu apt 安装命令 sudo apt install mysql-client-core-8.0 sudo apt install mysql-server-8.0终端输入 mysql 可以直接免密登录 如果此时提示需要密码,则可以进入配置文件,设置免密登录 sudo vim /etc/mysql/mysq…

Python爬虫性能优化:多进程协程提速实践指南

目录 1. 多进程爬虫的实现: 1.1 将爬虫任务划分成多个子任务: 1.2 创建进程池: 1.3 执行任务: 1.4 处理结果: 代码示例 2. 协程爬虫的实现: 2.1 定义异步爬虫函数: 2.2 创建事件循环&a…

小程序分包流程

目录 问题:小程序为什么要分包? 一、常见的分包形式 二、常规分包 概念: 1.操作位置 2.特点 3.分包使用 1.主包结构不变,但是要把分包过的页面移除 2.分几个包就声明几个 3.主结构展示 注意:分包之后当进行页…

GD32F207 位带操作 GPIO

下面的程序用在GD32F207上测试成功&#xff0c; 如果要在新的单片机上进行位带操作需要查看新的单片机的寄存器偏移量。 #define BITBAND(addr, bitnum) ((addr & 0xF0000000)0x2000000((addr &0xFFFFF)<<5)(bitnum<<2)) #define MEM_ADDR(addr) *((vol…

安防监控/视频集中存储/云存储平台EasyCVR v3.3增加首页告警类型

安防监控/视频集中存储/云存储EasyCVR视频汇聚平台&#xff0c;可支持海量视频的轻量化接入与汇聚管理。平台能提供视频存储磁盘阵列、视频监控直播、视频轮播、视频录像、云存储、回放与检索、智能告警、服务器集群、语音对讲、云台控制、电子地图、平台级联、H.265自动转码等…

基于Lin协议的UDS调度表

参考ISO 17987-2. 有两种调度模式&#xff1a; diagnostics only mode 没什么好说的&#xff0c;不存在普通应用报文。 interleaved diagnostics mode&#xff1a; 需要UDS请求时&#xff0c;等待当前normal communication schedule table执行完成&#xff0c;开始执行dia…

chromedriver.exe 的所有版本下载地址

Chrome for Testing availability 上面的网址是V115 v116.... 以上的。 CNPM Binaries Mirror 上面这个是V115版本以下的。 这个文章没有任何实际价值&#xff0c;记录的原因是因为突然发现过去的py无法运行&#xff0c;原因是chrome浏览器偷偷升级到V115&#xff0c;于是找…

Vue2中根据权限添加动态路由

Vue2中根据权限添加动态路由 大概记录一下主要代码 1.根据后端返回的路由列表生成左侧菜单&#xff08;后端返回的数据结构中用id和pid来区别包含关系&#xff09; 大概结构如下&#xff1a; 2.前端需要处理成包含children的树形结构 //动态生成菜单 export const gener…

Radek‘s notebook

VGGImagenette预训练迁移学习&#xff0c;6个训练样本 kaggle的dogs vs cats数据集&#xff1a; 博客&#xff1a;https://medium.com/radekosmulski/can-we-beat-the-state-of-the-art-from-2013-with-only-0-046-of-training-examples-yes-we-can-18be24b8615f 代码&#x…

MQTT协议-EMQX技术文档-spring-boot整合使用--发送接收-消费

概念先行&#xff1a; mqtt与mq的关系 MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种基于发布/订阅模式的通信协议&#xff0c;它与MQ&#xff08;Message Queue&#xff0c;消息队列&#xff09;有一定的关联&#xff0c;但二者并不完全相同。 M…

空气IT

现代社会中&#xff0c;空气质量成为了人们关注的焦点之一。随着工业化的发展&#xff0c;汽车尾气、工厂排放和燃煤等行为导致城市空气污染日益严重&#xff0c;给人们的健康和生活质量带来了极大的威胁。 首先&#xff0c;空气污染对人体健康造成了严重的危害。空气中的颗粒…

费米问题:如何估算?

解答费米问题有两个重要的思想&#xff1a; 第一个是“逻辑树法”&#xff1a; 用逻辑拆解把一个大的问题拆分为几个小问题&#xff0c;大问题是未知的&#xff0c;而拆解后的小问题是可以通过经验和逻辑推算得出的。最后再把得到解答的小问题反推到大问题上&#xff0c;用已…

HTML基础 知识点总结

从这篇笔记开始总结看过的《从0到1 HTMLCSSJavaScript》书籍笔记&#xff0c;记录HTML以及CSS的相关知识点&#xff0c;为之后从事相关工作打好基础 简单介绍 基本标签文本列表表格 一.简单介绍 HTML&#xff1a;超文本标记语言&#xff0c;HTML是一门描述性的标记语言CSS&a…

Visual Components 专业版功能介绍 衡祖仿真

Visual Components专业版Professional 版本包括Visual Components精华版Essentials 中所有的功能&#xff0c;并提供您用于建模和创建自己的组件的工具。 Visual Components专业版功能 1、GEOMETRY SIMPLIFICATION 几何体简化 通过简化和删除&#xff08;CAD&#xff09;模型…

如何快速的合并多个PPT使之成为一个PPT?

如何快速的合并多个PPT使之成为一个PPT&#xff1f; 项目过程中&#xff0c;经常给客户汇报&#xff0c;经常做PPT&#xff0c;有时候&#xff0c;需要把之前的ppt内容整合到新的内容中&#xff0c;如何快速合并以及使用呢&#xff1f; 幻灯片&#xff08;PPT中&#xff09;点…

微信开发之一键撤回消息的技术实现

撤回消息 请求URL&#xff1a; http://域名地址/revokeMsg 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;login接口返回 参数&#xff1a; 参数名必选类型说明wId是string登录实例标识wcId…

excel统计函数篇2之count系列

1、COUNT(value1,[value2],…):计算参数列表中数字的个数 2、COUNTA(value1,[value2],…)&#xff1a;计算参数列表中值的个数 联想在excel之数学函数、excel中的通配符一文中提到求和函数&#xff1a; SUMIF(range,ceriteria,[sum_range])&#xff1a;对范围内符合指定条件的…

H5: div与textarea输入框的交互(聚焦、失去焦点、键盘收起)

简介 本文是基于 VUE3TS 的代码说明。 记录自己遇到的 div 与 textarea 输入框交互的聚焦、失去焦点、键盘收起、表情插入不失去焦点的需求实现。 需求分析 1.固定在页面底部&#xff1b; 2.默认显示纯文字与发送图标按钮&#xff0c;文字超出的省略显示&#xff1b; 3.点击…

QT多屏显示程序

多屏显示的原理其实很好理解&#xff0c;就拿横向扩展来说&#xff1a; 计算机把桌面的 宽度扩展成了 w1&#xff08;屏幕1的宽度&#xff09; w2(屏幕2的宽度) 。 当一个窗口的起始横坐标 > w1&#xff0c;则 他就被显示在第二个屏幕上了。 多屏虚拟成一个桌面 qt的说明…