python极简教程08:对象的方法
测试奇谭,BUG不见。
讲解之前,我先说说我的教程和网上其他教程的区别:
1 我分享的是我在工作中高频使用的场景,是精华内容;
2 我分享的是学习方法,亦或说,是指明你该学哪些、该重点掌握哪些内容;
3 基于1和2,你可以按照我的教程学,也可以网上找视频学,也可以看书学……你得明白,掌握学习方法比找学习资料重要得多。
这一场,主讲python的面向对象的第二部分——对象的方法。
目的:掌握Python对象的五个核心方法。
init和new
讲解之前,先上一段代码
class Demo:
def __init__(self, name):
print("init")
print("init " + name)
def __new__(cls, *args, **kwargs):
print("new")
print("new " + args[0])
d = Demo("张三")
通过前面的学习,你能说出这段代码运行的输出结果吗?
答案是:
#new
#new 张三
通常,我们会认为__init__()是类的初始化方法,当实例化类之后,会优先执行它(运行后应当优先输出"init"、"init 张三"),但实际上,__new__()方法才优先执行的方法,同时,它也是创建对象的方法。
说得通俗一点:以造房子举例,new方法是打地基,存放建材原料,init方法则是按照图纸建造房子。
那么,什么时候用new方法?
其实,用得很少,更多的时候,我们使用的是init方法。但init方法用久了之后,就会误以为它是创建实例的方法,而实际上,new方法才是创建实例的方法。
大家谨记,以免面试时踩坑。
类方法、静态方法、对象方法
首先,先讲讲这三个方法如何使用。
- 类方法:使用 @classmethod 装饰,第一个参数是cls
- 静态方法:使用 @staticmethod 装饰
- 对象方法:不使用装饰器,第一个参数是self
class Cat:
age = 5
area = 'Chengdu'
def __init__(self, name):
self.name = name
# 这是一个有问题的方法
def drink():
print("Cat drink")
# 这是一个静态方法
@staticmethod
def eat(food):
print("Cat eat {}".format(food))
# 这是一个对象方法
def get_name(self):
return self.name
# 这是一个类方法
@classmethod
def info(cls):
print(cls.age)
print(cls.area)
print(self.name)
# 实例化一只叫Kitty的黑猫
black_cat = Cat('Kitty')
# 有问题的方法,直接报错了
# black_cat.drink()
# 静态方法调用
black_cat.eat('fish') # 可以实例(black_cat)调用
Cat.eat('fish') # 也可以类(Cat)调用
# 类方法调用
black_cat.info() # 可以实例(black_cat)调用
Cat.info() # 也可以类(Cat)调用
# 对象方法调用
print(black_cat.get_name()) # 只能实例(black_cat)调用
到这里,你可能会问,这东西有啥用?
如果你只想写个脚本,执行一些简单的程序,那确实没啥用。你可以不关心这三个方法以及他们的调用,甚至连class类都不用写,直接def搞定。
但是,如果你想进阶,理解面向对象,它们很重要。
类方法
- @classmethod 修饰,第一个参数是 cls
- 方法作用:和实例无关,可以直接用
类名.方法名()
调用 - 可能会需要用到类变量(注意:不是成员变量)
- 可以类调用,也可以实例调用
静态方法
- @staticmethod 修饰
- 方法作用:和实例无关,可以直接用
类名.方法名()
调用,相当于一个类对外界提供的工具方法 - 基本上不会用到类变量,用到类变量的话,只能硬编码调用类变量
- 可以类调用,也可以实例调用
对象方法
- 第一个参数是self
- 实例的方法
- 可以访问成员变量
- 只能实例调用,不能类调用
一如既往,做个总结
01 我知道,对于初学者来说,面向对象,这个抽象的概念很难理解,但是,我没说,你一定要理解;
02 如果确实没有编码基础,先学会用,在用的过程中去理解,不更好吗?
python极简教程08:对象的方法的更多相关文章
- Python 极简教程(八)字符串 str
由于字符串过于重要,请认真看完并保证所有代码都至少敲过一遍. 对于字符串,前面在数据类型中已经提到过.但是由于字符串类型太过于常用,Python 中提供了非常多的关于字符串的操作.而我们在实际编码过程 ...
- python极简教程04:进程和线程
测试奇谭,BUG不见. 大家好,我是谭叔. 这一场,主讲python的进程和线程. 目的:掌握初学必须的进程和线程知识. 进程和线程的区别和联系 终于开始加深难度,来到进程和线程的知识点~ 单就这两个 ...
- python极简教程01:基础变量
测试奇谭,BUG不见. 其实很久之前,就有身边的同事或者网友让我分享一些关于python编程语言的教程,他们同大多数自学编程语言的人一样,无外乎遇到以下这些问题: 网络上的资料过多且良莠不全,不知道如 ...
- Python 极简教程(三)数据类型
每种语言都有各种数据类型.这就像在现实生活中,我们计数的时候需要用到数字,在表述金额.重量.距离等需要精确计数时用到小数,在日常交谈中要用文字,等等.在计算机语言中,为了表述不同的情况,也需要用到各种 ...
- python极简教程05:生成器和匿名函数
测试奇谭,BUG不见. 讲解之前,我先说说我的教程和网上其他教程的区别: 1 我分享的是我在工作中高频使用的场景,是精华内容: 2 我分享的是学习方法,亦或说,是指明你该学哪些.该重点掌握哪些内容: ...
- python极简教程07:封装、多态和继承
测试奇谭,BUG不见. 这一场主讲python的面向对象部分--封装.多态和继承. 目的:掌握Python面向对象的三个核心概念. 封装 01 什么是封装? 封装的目的是,保护隐私.通俗的讲:不想让别 ...
- Python 极简教程(一)前言
现在 Python 用处很多,学的人也很多,其流行程度自不必说.但是很多人学 Python 的时候都遇到过问题,特别对于非计算机专业毕业的人来说. 现在的教程非常多,但是绝大部分对于初学者都不够友好. ...
- Python 极简教程(十一)字典 dict
字典是以大括号标识,以键值对(key:value)的形式,无序,不可重复,可变的集合类型. 字典具有非常高效的读写效率. >>> d = {} # 创建一个空字典 >>& ...
- Python 极简教程(七)列表 list
由于列表过于重要,请认真看完并保证所有代码都敲过一遍. 什么是列表 列表是 Python 中最常用的数据结构,也是一种数据类型,其样式如下: li = [1, 2, 3, 'a', 'b'] 列表是一 ...
随机推荐
- Google Earth Engine 批量点击RUN任务,批量取消正在上传的任务
本文内容参考自: https://blog.csdn.net/qq_21567935/article/details/89061114 https://blog.csdn.net/qq_2156793 ...
- 跨域:The 'Access-Control-Allow-Origin' header contains multiple values '*, *', but only one is allowed
https://blog.csdn.net/q646926099/article/details/79082204 使用Ajax跨域请求资源,Nginx作为代理,出现:The 'Access-Cont ...
- Birt报表分组格式调整
1.以如下SQL语句来说明,查找未完成打分的人员,有cname(测评人名字),uname(测评人单位),bname(被测评人名字),flag字段(未完成标志) SELECT var.cname,var ...
- 使用.NET 6开发TodoList应用文章索引
系列导航 使用.NET 6开发TodoList应用(1)--系列背景 使用.NET 6开发TodoList应用(2)--项目结构搭建 使用.NET 6开发TodoList应用(3)--引入第三方日志 ...
- 雨课堂自动切换PPT代码
浏览器运行js步骤 原仓库 Podium = {}; Podium.keydown = function(k) { var oEvent = document.createEvent('Keyboar ...
- SpringCloud(三) Zuul
Zuul 有了eureka . feign 和 hystrix 后,基本上就搭建了简易版的分布式项目,但仍存在一些问题,比如: 1.如果我们的微服务中有很多个独立服务都要对外提供服务,那么我们要如何去 ...
- 【LeetCode】372. Super Pow 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址: https://leetcode.com/problems/super-po ...
- 【剑指Offer】翻转单词顺序列 解题报告(Python)
[剑指Offer]翻转单词顺序列 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews 题 ...
- ZOJ 3872: Beauty of Array(思维)
Beauty of Array Time Limit: 2 Seconds Memory Limit: 65536 KB Edward has an array A with N integers. ...
- 网易云 微专业C++系统工程师
网易云 微专业C++系统工程师 一.学前基础 1.曾经学过某种编程语言(C语言最佳) 2.了解基本的变量.类型.作用域.循环和控制流程:了解基本数据类型(整数.浮点.字符串.数组等) 3.知道如何编译 ...