Python 进阶 (十二) 浅谈 python 中的方法

python十天干十二地支 例如,凡是含有“子”的干支年,就是“鼠年”,这一年里出生的人都是属“鼠”;凡是含有“丑”的干支年就是“牛年”,这一年进而出生的人都是属“牛”。从1984年的甲子年,到2044年又是甲子年。干支是天干和地支的总称。把干支顺序相配正好六十为一周,叫做“六十花甲子”,周而复始,循环记录,这就是俗称的“干支表”。(参考百度百科的“干支纪年”词条)。十二地支分别为:子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥。十天干分别为:甲、乙、丙、丁、戊、己、庚、辛、壬、癸。请编程确定给定公历年相应的干支纪年和该年属相。 阅读详情

我们在 class 中定义的实例方法其实也是属性,它实际上是一个函数对象:

class Person(object):
    def __init__(self, name, score):
        self.name = name
        self.score = score
    def get_grade(self):
        return 'A'

p1 = Person('Bob', 90)
print p1.get_grade
# => <bound method Person.get_grade of <__main__.Person object at 0x109e58510>>
print p1.get_grade()
# => A

也就是说,p1.get_grade 返回的是一个函数对象,但这个函数是一个绑定到实例的函数,p1.get_grade() 才是方法调用。

因为方法也是一个属性,所以,它也可以动态地添加到实例上,只是需要用 types.MethodType() 把一个函数变为一个方法:

import types
def fn_get_grade(self):
    if self.score >= 80:
        return 'A'
    if self.score >= 60:
        return 'B'
    return 'C'

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

p1 = Person('Bob', 90)
p1.get_grade = types.MethodType(fn_get_grade, p1, Person)
print p1.get_grade()
# => A
p2 = Person('Alice', 65)
print p2.get_grade()
# ERROR: AttributeError: 'Person' object has no attribute 'get_grade'
# 因为p2实例并没有绑定get_grade


给一个实例动态添加方法并不常见,直接在 class 中定义要更直观。

由于属性可以是普通的值对象,如 str,int 等,也可以是方法,还可以是函数,大家看看下面代码的运行结果,请想一想 p1.get_grade 为什么是函数而不是方法:

class Person(object):
    def __init__(self, name, score):
        self.name = name
        self.score = score
        self.get_grade = lambda: 'A'

p1 = Person('Bob', 90)
print p1.get_grade
print p1.get_grade()

直接把 lambda 函数赋值给 self.get_grade 和绑定方法有所不同,函数调用不需要传入 self,但是方法调用需要传入 self。

Python保姆级教程(十二):学习资源与进阶方向 摘要:本文为Python学习者提供系统化的进阶指南,涵盖从入门到精通的完整学习路径。首先推荐权威学习资源,包括官方文档、经典书籍和在线课程,并分类整理数据分析、Web开发、自动化脚本等主流应用方向的核心技能与实战案例。特别强调实践的重要性,建议通过LeetCode、Kaggle等平台练习,参与开源项目。针对常见学习困境,提出"小步快跑"策略:每日学习新知识,每周完成小功能,每月搞定小项目。文章指出兴趣驱动和持续输出是突破瓶颈的关键,建议选择一个方向深耕后再扩展领域,最终将Python转化 阅读详情

相关推荐

红外协议 IR NEC 协议深度解析-简单易懂协议详解

1. 协议特征 使用双向编码(又称曼彻斯特编码); 使用38K载波对编码后的波形进行调制; 位时间 1.12ms 或 2.25ms 2. 调制 定义脉冲560µS为脉冲基本宽度T; 根据脉冲时间长短来解码。推荐载波占空比为1/3至1/4: (1) Logic “1” 位宽为2.25ms,脉冲时间560us(T + 3T); (2) Logic “0” 位宽为1.12ms,脉冲时间560us(T + T)。 (3 ) 重复码: 位宽为11.25ms,脉冲时间9ms(16T + 4T)。 3. 协议

代码打工人的博客 1万+

Python进阶

一、函数式编程 Python中的函数: 能像普通对象一样,作为参数传递给其他函数,可被赋值给其他变量,可作为返回值,可被定义在另外一个函数内。 1.1简介 functional,相较于函数编程 function 特点: 1.把计算视为函数而非指令; 2.纯函数式编程:不需要变量,无副作用,测试简单; 3.支持高阶函数,代码简单。 python特点: 1.非纯函数

Luka的異想世界 633

别再纠结选哪个向量库了!我用Spring AI + Redis Stack 7.2,5分钟搞定企业知识库RAG原型

本文介绍了如何利用Spring AI和Redis Stack 7.2快速构建企业级RAG应用,解决向量数据库选型难题。Redis Stack 7.2集成了RediSearch模块,支持向量相似性搜索,具备高性能、低成本、零学习成本等优势,特别适合中小团队快速搭建知识库系统。通过实战代码示例,展示了从环境准备到核心功能实现的完整流程。

weixin_29061041的博客 270

Java 成绩分析绘图_(java)编写一个学生成绩分析程序

展开全部//学生类publicclassStudent{privateStringNO;privateStringname;privateintmath;privateintphysics;privateintenglish;privateinttotal=0;publicStudent(StringNO,Stringname,intmath,int...

weixin_42214418的博客 501

4.无限共轭距柯克物镜设计——zemax学习笔记

无限共轭cooker物镜

fly_daerm的博客 1596

Android Studio打包全攻略---从入门到精通

初出茅庐 手动打包怎么手动打包项目写完了,现在需要把应用上传到市场,问题出现—怎么把代码变成.apk(Android的可安装文件)。 1. 创建签名文件 2. 填写好签名参数 3. 生成APK 注意:签名的密码和密匙的密码注意保管,不要忘了,签名文件别泄漏了,也别搞丢了为什么要打包我最开始就有这个疑问,我们的代码不是点了下运行按钮就直接安装到手机上了吗,我们在在项目Project

我早就想,要这样载着你,翻山越岭 2万+

7-6 jmu-Java-02基本语法-06-枚举 (3 分)

定义一个枚举类型Grade来表示考试的4个等级,值包含A,B,C,D,E 编写一个函数Grade getGrade(int score)将传递进来的score转化为枚举类型 >=90 and <=100返回A,>=80 and <90 返回B,>=70 and <80 返回C,>=60 and <70返回D,其他的返回E #main方法 输入分数后,调用getGrade函数返回相应的Grade,使用switch根据Grade,根据分数打印不同的评价: Exce

世界在我口袋的博客 3320

昇腾,Ascend,NPU,mindie,镜像,部署vllm:第5篇,昇腾环境下部署蒸馏版deepseek-r1,并在dify中注册模型供应商

这两天没少折腾deepseek-r1。之前在A100上用ollama部署了一份DeepSeek-R1-Distill-Qwen-32B,感觉真的特别慢。现在,再用昇腾部署一遍,看看速度能不能更快。p.s. 类似的内容其实已经写了很多遍了。但感觉之前写得都太碎,不够顺畅。接着新模型写篇长文,把能包括的都包括进来。这样大家也不需要到处翻来翻去。

xiezhipu的博客 2450

Python进阶(十一)实例定义方法

Python进阶(十一)-定义实例方法  一个实例的私有属性就是以__开头的属性,无法被外部访问。那这些属性定义有什么用?   虽然私有属性无法从外部访问,但是,从类的内部是可以访问的。除了可以定义实例的属性外,还可以定义实例的方法。   实例的方法就是在类中定义的函数,它的第一个参数永远是 self,指向调用该方法的实例本身,其他参数和一个普通函数是完全一样的。class Person(obj

IT全栈 华强工作室 4万+

海思Hi3519A开发:DSP开发指南

通过创建DSP项目、实现算法、编译调试等步骤,开发者可以充分利用Hi3519A芯片集成的DSP,实现各种音视频处理功能。通过以上示例,我们可以看到在Hi3519A开发平台上进行DSP开发是一项强大而灵活的任务。在调试过程中,可以使用调试工具提供的功能,如断点设置、变量查看等,以便更好地理解和优化DSP算法的执行过程。在Hi3519A开发平台上,我们可以利用DSP的高性能计算能力来加速这些算法的执行。在实际的DSP开发中,算法的实现可能更加复杂,需要结合具体的项目需求进行。3.2 DSP算法实现。

QoTypescript的博客 1494

Playwright实战:打造绕过全维度前端反爬的无头浏览器爬虫(2026实战版)

Playwright绕过前端反爬的核心是模拟真实:真实的设备指纹、真实的行为轨迹、真实的网络请求;2025年前端反爬的核心检测维度是设备指纹+行为轨迹+网络请求,三者缺一不可;实战中需重点关注WebGL/Canvas指纹模拟、行为随机性、请求头完整性,这是绕过反爬的关键;性能优化需以“不触发反爬”为前提,优先选择浏览器复用、资源拦截,而非无限制并发。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2094

python中方法也是属性

我们在 class 中定义的实例方法其实也是属性,它实际上是一个函数对象: class Person(object): def __init__(self, name, score): self.name = name self.score = score def get_grade(self): return 'A' p1 =

喜欢就要珍惜,珍惜就别放弃 1142

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Python进阶(十二)浅谈python中的方法

也就是说,p1.get_grade 返回的是一个函数对象,但这个函数是一个绑定到实例的函数,p1.get_grade() 才是方法调用。直接把 lambda 函数赋值给 self.get_grade 和绑定方法有所不同,给一个实例动态添加方法并不常见,直接在class中定义要更直观。

IT全栈 华强工作室 4万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Python进阶(十二)-浅谈python中的方法

分享一下我的偶像大神的人工智能教程!http://blog.youkuaiyun.com/jiangjunshow 也欢迎转载我的文章,转载请注明出处 https://blog.youkuaiyun.com/mm2zzyzzp Python进阶(十二)-浅谈python中的方法 &nbsp;&nbsp;我们在 class 中定义的实例方法其实也是属性,它实际上是一个函数对象...

mm2zzyzzp的博客 192

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Python进阶(十二)浅谈python中的方法_person‘ object has no attribute ‘score

空(void)元素有那些?⾏内元 素和块级元素有什么区别?cookies,sessionStorage,localStorage 的区别?Doctype作⽤?了解 this 嘛,bind,call,apply 具体指什么。serviceWorker的使用原理是啥?问:0.1 + 0.2 === 0.3 嘛?箭头函数和普通函数有啥区别?箭头函数能当构造函数吗?Canvas 和 SVG 图形的区别是什么?如何实现浏览器内多个标签页之间的通信?HTML5 的离线储存的使用和原理?简述⼀下src与href的区别?

2401_84446787的博客 849

Python进阶(十二)浅谈python中的方法_person‘ object has no attribute ‘score(2)

如果30岁以前,可以还不知道自己想去做什么的话,那30岁之后,真的觉得时间非常的宝贵,不能再浪费时间在一些碎片化的事情上,比如说看综艺,电视剧。一个人的黄金时间也就二,三十年,不能过得浑浑噩噩。这也是为什么大家都说30岁是程序员的门槛,很多人迈不过去,其实各行各业都是这样都会有个坎,公司永远都缺的高级人才,只用这样才能在大风大浪过后,依然闪耀不被公司淘汰不被社会淘汰。也就是说,p1.get_grade 返回的是一个函数对象,但这个函数是一个绑定到实例的函数,p1.get_grade() 才是方法调用。

2401_84446787的博客 466

《Python进阶系列》十二:最全魔术方法整理

所谓魔法函数(Magic Methods),是Python的一种高级语法,允许你在类中自定义函数,并绑定到类的特殊方法中。

一起加油~ 5120

Python输出十二星座的符号

无意中发现了十二星座的字符,觉得有意思,于是用Python来实现输出 arr1 = ['白羊座', '金牛座', '双子座', '巨蟹座', '狮子座', '处女座', '天秤座', '天蝎座', '射手座', '摩羯座', '水瓶座', '双鱼座'] for i in range(12): print(chr(i + 9800), end=' ') print(arr1[i]) ...

KYuruyan的博客 1万+

python编程入门十二:函数进阶

第十二章:函数 关于python的函数,我想分两章来完成,原因就是不管是哪门语言,函数都是一个内容相当多的一个机制

洪博hopes的博客 1237

第十二课:Python学习之函数进阶

python函数进阶

HappyAcmen 913

使用python编写十二进制与十进制转换程序

我在面试前,面试公司发来一道python题,我觉得还挺有意思的。题目如下。""" “”" 我们知道 2 进制数字由 2 种字符(01)组成,10 进制数字由 10 种字符(0123456789)组成,16 进制由 16 种字符(0123456789ABCDEF)。不同进制的数字之间可以相互转换。 我们定义一种 “十二地支进制” 数字,这种数字由中国古代地支的 12 种字符(子、丑、寅、卯、辰、巳、...

KIDD5433的博客 3112

0基础学python第十二天:python中的元组进阶操作

这篇文章主要针对的是python的进阶语法中的元组进阶操作,在之后还有字典,集合的进阶操作,本篇文章主要介绍的是目前常用的操作函数,不常用的就不介绍了,后续如果还有,会继续进行更新。

qq_59404973的博客 406

Python 进阶之路 (十二) 尾声即是开始

Python进阶之路总结 大家好,我的&lt;&lt; Python进阶之路&gt;&gt;到这一期就到此为止了,和 &lt;&lt;Python 基础起步&gt;&gt;不同,在掌握了一些基础知识后,我在这一期里同步和大家分享了我的学习心得,一共主要关注了以下几个知识点: Python 进阶之路 (一) List 进阶方法汇总 Pyt...

weixin_33935777的博客 498

十二硬币问题

十二硬币问题 == 解题思想源于“约翰·比斯利”(一个歪果仁) ##1、问题重述 给出12个硬币,其中一个是假硬币,用一个天平来确定三种重量的假币(其中假币可能比其他硬币轻或重)。问:至少称量多少次能够保证判断出:是否假币,而且如果有,确定假币是哪一颗, ##2、问题推导 ###3颗硬币的情况 我们分析3颗硬币的情况,是为了得出一种分类方法。 三枚硬币测量如图: 经过这两次称重之后,我们可...

YIF_LEE的博客 5175
上一篇: Python 进阶 (十)Python 编程规范
下一篇: Python 进阶 (十三) 浅谈 sorted 函数应用及文件操作
wrr-cat
博客等级 码龄9年 128粉丝 302原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值