python全栈学习记录(二十)类的属性传递与绑定方法

news2024/9/28 11:12:48

类的属性传递与绑定方法

文章目录

  • 类的属性传递与绑定方法
  • 一、面向对象与面向过程
  • 二、类
  • 三、类的属性
  • 四、类的绑定方法

一、面向对象与面向过程

面向过程编程:核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么然后干什么。。。基于该思想编写程序好比在设计一条流水线,是一种机械式的思维方式。

  • 优点:复杂的问题流程化、进而简单化
  • 缺点:扩展性差

面向对象编程:核心对象二字,对象是数据与功能的结合体,其精髓在于整合两个字上。面向对象本质上就是将一系列的数据和功能整合到一块儿,然后利用这个集合对数据进行操作。

  • 优点:可扩展性强
  • 缺点:编程的复杂度要高于面向过程

二、类

对象是数据和功能的结合体,类是一系列对象相似的数据和功能的结合体。
在现实世界中:先有的一个个具体存在的对象,然后随着人类文明的发展才了分类的概念。
在程序中:必须先定义类,后调用类来产生对象。

类的定义可以按照以下的方式:

class School():
    school='五道口职业技术学院'

    def choose_course(self):
        print('is choosing course')

#__dict__可以查看类内部存放的属性和方法
print(School.__dict__)
#修改类的属性,相当于School.__dict__['school']='六道口职业技术学院'
School.school='六道口职业技术学院'
print(School.school)
<<<"六道口职业技术学院"

#给类添加新属性,相当于School.__dict__['student_num']=1000
School.student_num=1000
print(School.student_num)
<<<1000

#调用类的方法
School.choose_course(111)
<<<"is choosing course"

其中school称为类的属性,choose_course称为类的方法。类体代码会在类定义阶段就立刻执行,会产生一个类的名称空间。类的本身其实就是一个容器/名称空间,是用来存放名字的,这是类的用途之一。

三、类的属性

调用类的过程就是将类实例化的过程,调用类后拿到的返回值就是类的一个对象,也可以称之为类的一个实例。

class School():
    school='五道口职业技术学院'

    def choose_course(self):
        print('is choosing course')

s1=School()
s2=School()

给不同的实例定制不同的属性:

class School():
    school='五道口职业技术学院'

    def choose_course(self):
        print('is choosing course')

s1=School()
s2=School()
print(s1.__dict__,s2.__dict__)
<<<{} {}
#实例s1、s2初始时没有任何的属性值,如果调用school属性本质是取了School类的属性
#换句话说就是School的实例会继承School的属性
print(s1.school,s2.school)
<<<'五道口职业技术学院' '五道口职业技术学院'

#给实例添加属性
s1.num,s2.num=1,2
#可以看到给s1和s2添加属性本质就是在实例的名称空间内增加了一个变量
print(s1.__dict__,s2.__dict__)
<<<{'num': 1} {'num': 2}

#给实例定制新的属性
s1.school,s2.school='六道口职业技术学院''七道口职业技术学院'
print(s1.school,s2.school)
<<<'六道口职业技术学院''七道口职业技术学院'

如果想在实例化的过程中就给实例定制属性,可以使用__init__方法,__init__方法会在类实例化以后自动调用,负责初始化实例的属性,切记__init__方法不能有返回值

class School():
    school='五道口职业技术学院'
	
	def __init__(self,num):
		self.num=num

    def choose_course(self):
        print('is choosing course')

s1=School(1)
s2=School(2)
print(s1.num,s2.num)
<<<1 2

以上代码的运行过程是先实例化类产生实例,然后将实例化时传的参数传给__init__生成s1、s2自己的属性s1.num、s2.num。

查找属性时解释器会先从对象中查找,找不到在到类中查找,以此类推。

class School():
    school='五道口职业技术学院'
	num=3
	
	def __init__(self,num):
		self.num=num

    def choose_course(self):
        print('is choosing course')

s1=School(1)
s2=School(2)
print(s1.num,s2.num)
<<<1 2

del s1.num,s2.num
print(s1.num,s2.num)
<<<3 3

四、类的绑定方法

类中的方法类可以直接调用,不过要给self参数传值,但是一般而言类的方法是绑定被对象使用的。当类的方法在实例中调用时,方法就会被绑定给实例,而方法中的self参数会被自动传值为实例的内存地址。

class School():
    def choose_course(self):
    	print(self)

s1=School()
s2=School()
#绑定给不同对象的方法内存地址有所不同
print(School.choose_course,s1.choose_course,s2.choose_course)
<<< <function School.choose_course at 0x000001E4B2EC9160> 
<bound method School.choose_course of <__main__.School object at 0x000001E4B2EC7EE0>> <bound method School.choose_course of <__main__.School object at 0x000001E4B2EC7EB0>>

School.choose_course(111)
s1.choose_course()
s2.choose_course()
#类中调用方法self就是传的参数,而实例中调用绑定方法self是实例的内存地址。
<<<111
<<< <__main__.School object at 0x00000211737D7F10>
<<< <__main__.School object at 0x00000211737D7EE0>

注意点:

  • 类中的方法第一个参数名称没有硬性的规定,不过约定俗成使用self作为绑定方法的第一个参数名。

在python基础中学到的容器类型其实也是一个类,而它们的内置方法就是绑定给类的方法。

print(list)
l1=[]
print(l1.append)
<<< <class 'list'>
<<< <built-in method append of list object at 0x000002727FCFA880>

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

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

相关文章

阿里发布Qwen2.5:编程与数学的AI新革命!

阿里发布Qwen2.5&#xff1a;编程与数学的AI新革命&#xff01; 阿里发布了Qwen2.5系列模型&#x1f680;&#xff0c;带来编程和数学领域的超强升级&#x1f9b8;‍♂️。多种规格可选&#xff0c;开源模型推动创新&#x1f513;&#xff0c;让AI助手更智能&#xff01;快来体…

一阶低通滤波器Simulink仿真测试

1、低通滤波器(SMART PLC双线性变化和后向差分对比测试 低通滤波器(SMART PLC双线性变换和后向差分对比测试)_后向差分 和 双线性-CSDN博客文章浏览阅读367次。该博客详细探讨了低通滤波器的设计,对比了SMART PLC中的双线性变换和后向差分法。内容包括Tustin变换公式、后向差…

第一批学习大模型的程序员,已经碾压同事了,薪资差距都甩出一条街了...

前言 随着人工智能技术的突飞猛进&#xff0c;AI大模型已成为引领未来的核心技术。从ChatGPT的横空出世到GPT-4o的震撼发布&#xff0c;AI技术正以前所未有的速度改变着我们的生活和工作方式。 在这场AI革命中&#xff0c;企业对AIGC人才的需求正以指数级增长。据《AIGC就业趋…

基于Hive和Hadoop的病例分析系统

本项目是一个基于大数据技术的医疗病历分析系统&#xff0c;旨在为用户提供全面的病历信息和深入的医疗数据分析。系统采用 Hadoop 平台进行大规模数据存储和处理&#xff0c;利用 MapReduce 进行数据分析和处理&#xff0c;通过 Sqoop 实现数据的导入导出&#xff0c;以 Spark…

OpenAi_Moderation审核更新

更新原文档 最新openai-python版本已不可直接用 openai.Moderation.create()

芝法酱学习笔记(0.5)——使用jenkins做自动打包

前言 上节讲了SpringBoot上的打包。但这些过程都是手动的&#xff0c;在实际的开发测试时&#xff0c;自动化的打包部署&#xff0c;可以大大提升团队开发的效率 一、去官网下载 1.1 官网安装命令 对于如何安装的问题&#xff0c;我向来推荐官网 wget -O /usr/share/keyri…

论文阅读:LM-Cocktail: Resilient Tuning of Language Models via Model Merging

论文链接 代码链接 Abstract 预训练的语言模型不断进行微调&#xff0c;以更好地支持下游应用。然而&#xff0c;此操作可能会导致目标领域之外的通用任务的性能显著下降。为了克服这个问题&#xff0c;我们提出了LM Cocktail&#xff0c;它使微调后的模型在总体上保持弹性。…

解决Mac 默认设置 wps不能双面打印的问题

目录 问题描述&#xff1a; 问题解决&#xff1a; 问题描述&#xff1a; 使用mac电脑的时候&#xff0c;发现wps找不到双面打印的按钮&#xff0c;导致使用wps打开的所有文件都不能自动双面打印 问题解决&#xff1a; mac的wps也是有双面打印的选项&#xff0c;只是默认被关…

双指针算法【算法 18】

双指针算法 在算法设计与实现中&#xff0c;双指针算法是一种非常高效且常用的技术&#xff0c;尤其适用于处理数组和字符串相关的问题。通过维护两个指针&#xff08;通常称为“快指针”和“慢指针”&#xff09;&#xff0c;双指针算法能够在对数组或字符串进行单次遍历的同时…

VSCode rust文件中的api点击无法跳转问题

如果配置了vscode的setting.json windows端的话 "settings": { "typescript.tsc.autoDetect": "off","rust-analyzer.linkedProjects": [".\\gui-btn\\Cargo.toml",".\\temp\\Cargo.toml", ],其他端类似 能不…

电脑怎么进行网页限制操作?

1、修改Hosts文件&#xff1a; 打开文件资源管理器&#xff0c;导航至C:\Windows\System32\drivers\etc\目录&#xff08;注意&#xff0c;修改前最好备份原文件&#xff09;。 找到并打开hosts文件&#xff0c;以管理员身份运行文本编辑器进行编辑。 在文件末尾添加一行&am…

基于Springboot投稿和稿件处理系统设计与实现

博主介绍&#xff1a;专注于Java vue .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了1000毕设题目 方便大家学习使用 感兴趣的…

Java | Leetcode Java题解之第441题排列硬币

题目&#xff1a; 题解&#xff1a; class Solution {public int arrangeCoins(int n) {return (int) ((Math.sqrt((long) 8 * n 1) - 1) / 2);} }

【STM32开发环境搭建】-2-安装STM32CubeMX

目录 1 下载STM32CubeMX 2 使用STM32CubeMX 2.1 设置Embedded software Package存放路径 2.2 下载并安装STM32的Embedded software Package 结尾 1 下载STM32CubeMX 注册一个ST的账号&#xff0c;单击STM32CubeMX - STM32Cube初始化代码生成器 - 意法半导体STMicroelectr…

《 C++ 修炼全景指南:十三 》为什么你的代码不够快?全面掌控 unordered_set 和 unordered_map 的哈希性能飙升魔法

摘要 本文深入探讨了 C 标准库中的两大无序容器——unordered_set 和 unordered_map&#xff0c;从底层实现、核心操作、性能优化、实际应用等多个方面进行了全面分析。首先&#xff0c;文章介绍了这两种容器的基本概念&#xff0c;说明了它们基于哈希表实现的特点&#xff0c…

AMD ROCm™ 安装指南

AMD ROCm™ installation — ROCm Blogs 注意: 本文之前是 AMD 实验笔记博客系列的一部分。 AMD ROCm™ 是第一个面向 HPC/超大规模级 GPU 计算的开源软件开发平台。AMD ROCm™ 将 UNIX 的选择权、极简主义和模块化软件开发哲学引入 GPU 计算领域。有关更多信息&#xff0c;请参…

华为OD机试 - 小明的幸运数(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…

modelsim仿真出现的问题

问题&#xff1a;仿真波形没有结果 解决 点击Optimization Options 选第二个 右键testbench&#xff0c;Add Wave&#xff0c;快速添加 如何更改字体大小 Tools Edit Preference

latex设置背景颜色

\documentclass{article} \usepackage{xcolor} % 定义颜色&#xff0c;将#FCF9EA转换为LaTeX的颜色定义 \definecolor{mycolor}{HTML}{FCF9EA} % 设置页面颜色 \pagecolor{mycolor} \begin{document} This is a test page with the background color set to \# FCF9E…

如何巧妙运用Shell变量:掌握脚本编程的核心技巧

目录 前言一、Shell变量——变量类型1、用户自定义变量2、环境变量用./ 启动脚本文件记得加权限哦 二、Shell变量——变量赋值和访问(一&#xff09;变量定义(二&#xff09;变量的使用(三&#xff09;删除变量(四&#xff09;添加环境变量(五&#xff09;内部变量(六&#xff…