资讯详情

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_第一个形参需要穿参,否则报错') # 打印实例化实例 print(car) 

运行结果:

第一个形参需要穿参,否则会报错 <__main__.Car object at 0x7fa62097b610>  Process finished with exit code 0

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

标签: 35100d07no光电传感器35100d07pc光电传感器2565d07nc光电传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台