Python self理解

self作为类的初始化init方法中的第一个参数。类的所有实例都有该类的所有方法,因此子类的所有实例都有父类的所有方法。

Python类

在python中所有的类都直接或者间接继承自Object类,定义了类之后就定义了一个命名空间, 里面定义的属性可以通过类名来引用。新定义的类中有一些Object的属性,可以在其中定义变量或者函数。实例化之后会创建一个对象。

class A:
	pass

a = A()

此处创建了一个类A, 并且进行了实例化,a为类A的实例化对象。A 类和 a中都包含了 如下一些属性

In [43]: dir(a)
Out[43]:
['__class__',
 '__delattr__',
 '__dict__',
 '__dir__',
 '__doc__',
 '__eq__',
 '__format__',
 '__ge__',
 '__getattribute__',
 '__gt__',
 '__hash__',
 '__init__',
 '__init_subclass__',
 '__le__',
 '__lt__',
 '__module__',
 '__ne__',
 '__new__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__setattr__',
 '__sizeof__',
 '__str__',
 '__subclasshook__',
 '__weakref__',
In [78]: A.foo = lambda x : x + 1

In [79]: A.foo(1)
Out[79]: 2

In [80]: a.foo(1)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-80-7dc85fd7a693> in <module>()
----> 1 a.foo(1)

TypeError: <lambda>() takes 1 positional argument but 2 were given

self的使用

方法还是指的是通过类的实例化对象调用的函数,方法函数的第一个行参表示类的实例化对象,通常写成self。执行a.foo(1)时就相当于执行A.foo(a, 1),因为A.foo()中只有一个行参,传入的参数多余需要的参数,所以发生类型错误。

Python实例化的过程

class A():
	def __init__(self, num):
		self.num = num
a = A(15)
这个过程:
1. 产生一个a对象
2. A_a.__init__('a', 15)在将a对象传入__init__构造函数中实例化对象
3. a.__dict__可以查看实例化对象中的属性

总结

Python的类中定义函数时的self关键字和Python的方法函数有关,方法函数由类的实例化对象调用,需要把调用它的实例化对象传入方法函数中,self就是表示实例化对象的行参

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值