栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python面试高频问题:类方法中的参数self到底是什么?

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python面试高频问题:类方法中的参数self到底是什么?

本文旨在以最简单的角度叙述,一些情况并未列举。

首先,我们要知道一个类方法是服务于每一个实例化的实例。那从底层来讲,既然是服务于实例的,那实例肯定是要在类方法里面被操作,经过验证,在类方法中的参数self实际上就是这个实例本身。

可以用这样一个简单的方法验证:

class Car:
    def print_info(self):
        # 打印self
        print(self)

# 实例化Car类并调用方法打印出类中的self
car = Car()
car.print_info()
# 打印出实例化的实例
print(car)

这样运行后结果是这样的:

<__main__.Car object at 0x7f77d07eb610>
<__main__.Car object at 0x7f77d07eb610>

Process finished with exit code 0

我们发现打印出来的两个内存地址都是一样的,全部指向Car object也就是Car类的实例。

另外,实际上这个参数的名字是可以自定义的,不过我们约定俗成都会写self,只要是类方法参数的第一个就是实例本身。

class Car:
    def print_info(this):
        # 打印this
        print(this)

# 实例化Car类并调用方法打印出类中的this
car = Car()
car.print_info()
# 打印出实例化的实例
print(car)

结果仍然完全一致。

那么如果在类中要定义并使用跟实例没有关系的静态方法呢?用到@staticmethod即可,第一个参数不再是实例,即使你写的仍然是self。

class Car:
    def print_info(self):
        # 打印self
        print(self)

    @ staticmethod
    def print_info_2(self):
        print(self)

# 实例化Car类并调用静态方法
car = Car()
car.print_info_2('第一个形参需要被穿参,否则报错')
# 打印出实例化的实例
print(car)

运行结果:

第一个形参需要被穿参,否则报错
<__main__.Car object at 0x7fa62097b610>

Process finished with exit code 0

总结下来,self就是这个实例本身,包括一些其他魔术方法比如__init__等都同理,名称也不固定,类方法的第一个形参即是。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1001022.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号