IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> python面向对象——02.self到底是什么 -> 正文阅读

[开发工具]python面向对象——02.self到底是什么

一、方法的分类

要了解self到底是什么,就要从python的方法开始讲起了。python中的方法分为实例方法,类方法和静态方法

在这里插入图片描述
代码:

class Person:
    def code(self):
        print("实例方法,编程---", self)

    @classmethod
    def sleep(cls):
        print("类方法,睡觉---", cls)

    @staticmethod
    def walk():
        print("静态方法,走路---")


p = Person()

print(p)
# 实例方法,默认第一个参数必须是实例对象
p.code()

# 类方法,默认第一个参数必须是类对象
Person.sleep()

# 静态方法,没有默认参数
Person.walk()

运行结果

D:\PycharmProjects\pycharm_learn\venv\Scripts\python.exe D:/PycharmProjects/pycharm_learn/demo.py
<__main__.Person object at 0x00000240DBB73F10>
实例方法,编程--- <__main__.Person object at 0x00000240DBB73F10>
类方法,睡觉--- <class '__main__.Person'>
静态方法,走路---

Process finished with exit code 0

二、self到底是什么

以上代码在写的时候,self会自动填入进去,也就是说def xxx()这个时候pycharm会自动填入self,从运行结果也可以看到,print p和p.code里面的self是同一个内容,也就意味着实例方法,会将实例本身作为第一个默认参数传入方法。同理类方法也是,会将类对象传入第一个默认参数。也就是说,这里的self仅仅是一个形参,python习惯命名为self,你甚至可以修改为其他值,比如current_obj
在这里插入图片描述
综上,self就是实例方法的默认第一个参数的形式参数,也就是一个参数命名而已

三、不同方法的特点

1、第一个默认参数不同
类方法:类对象
实例方法:实例对象
静态方法:无第一个默认参数
2、实例,类,静态方法都是存放在类对象里面的
与属性不同,属性分为类属性和实例属性,分别存放在类和实例的__dict__键值对里。而方法都是存放在类中,代码体现
在这里插入图片描述
3、调用方式不同
后面补充,大原则是,不管怎么调用,要保证调用的方法是他们的类型需要的第一个参数

四、调用方法

1.代码示例

class Person:
    def eat(self, food):
        print("实例方法,吃---", self, food)

    @classmethod
    def sleep(cls, time):
        print("类方法,睡觉---", cls, time)

    @staticmethod
    def walk():
        print("静态方法,走路---")


p = Person()
p.age = 18
# 标准调用
p.eat("米饭")
# 可以看到其实实例方法就是一个普通的方法,self也就是一个普通的参数仅此而已,可以直接类去调用
Person.eat(123, "水果")
# 如果传入一个实例,就和实例直接调用是一样的效果了
Person.eat(p, "水果")
# 其实方法都是放在类的__dict__里的,所以和类属性非常相似
func = Person.eat
func(p, "面条")

# 标准调用类方法,类方法上面classmethod是一个装饰器,装饰器的作用是给方法增加本身没有的功能。这个类方法装饰器的作用就是不管是谁调用,都会给
# 其对应的类作为第一个参数默认传入,且如果是子类,会给子类的类~~~下面两行都是标准调用类方法
p.sleep("一个小时")
Person.sleep("两个小时")

# 同样,可以得到方法本身再加以调用
func2=Person.sleep
func2("三个小时")

# 静态方法不传入任何默认参数,所以即可用类调用,也可以用对象调用
p.walk()
Person.walk()

2.运行结果

在这里插入图片描述.

3.总结

类方法和静态方法都可以用类或者实例对象调用,实例方法需要用实例对象调用。如果实例方法实在想用类调用,就要在调用的时候传入一个具体的对象

在这里插入图片描述

五、如何选择设计为什么方法

既然方法有这么多,那到底什么时候用什么方法呢。我个人总结为:当这个方法是针对某个对象进行某种操作的时候,用实例方法;当这个方法与对象本身无关,可以在调用的时候处理任意某个对象时可以用类方法;当一个方法与类和对象都没有什么关系,但是又需要定义出来时,可以用静态方法

l = [1, 3, 2, 4, 5]

# 实例方法,可以实例直接使用
l.sort()
print(l)

l = [1, 3, 2, 4, 5]
# 类方法,类方法使用的时候需要传入一个对象
list.sort(l)
print(l)

未完待续

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2021-11-15 16:04:47  更:2021-11-15 16:04:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/23 22:29:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计