Python 理解類中self的含義

2021-10-06 08:21:22 字數 2665 閱讀 4004

self代表的是類的例項,而不是類

class test(object):

def prt(self):

print(self)

print(self.__class__)

t = test()

t.prt()

執行結果:

<__main__.test object at 0x10fe90fd0>

從上面的執行結果可以看出,self指向是類的例項物件,self.__class__指向的類

self是必寫的?

在python直譯器內部,當我們呼叫t.prt()時,實際上直譯器解釋為test.prt(t),也就是說把self替換成類的例項

class test(object):

def prt(self):

print(self)

print(self.__class__)

t = test()

# t.prt()

test.prt(t)

**與上面**執行結果一樣。

實際上self是不可以省略的

class test(object):

def prt():

# print(self)

# print(self.__class__)

print('aaa')

t = test()

t.prt()

執行結果:

typeerror: prt() takes 0 positional arguments but 1 was given
prt()方法在定義時沒有定義引數,但是我們執行時強行傳了乙個引數,等同於我們傳了乙個引數t。

如果我們定義和呼叫時均不傳類例項是可以的,這就是類方法:

class test(object):

def prt():

# print(self)

# print(self.__class__)

print('aaa')

t = test()

# t.prt()

test.prt()

執行結果為:aaa

在繼承時,傳入的是哪個例項,就是那個傳入的例項,而不是定義了self類的例項

class parent:

def p(self):

print(self)

class child(parent):

def c(self):

print(self)

cl = child()

cl.c()

cl.p()

pa = parent()

pa.p()

執行結果:

<__main__.child object at 0x107cf4e90>

<__main__.child object at 0x107cf4e90>

<__main__.parent object at 0x107cf4e10>

執行cl.p()時,相當於child.p(cl),所以self指的是child類的例項,由於child中沒有定義p(),所以會沿著繼承樹往上找,在parent類中有p()方法,所以就會成功呼叫

在描述符類中,self指的是描述符類的例項

class desc:

def __get__(self, ins, cls):

print('self in desc: %s ' % self )

print(self, ins, cls)

class test:

x = desc()

def prt(self):

print('self in test: %s' % self)

t = test()

t.prt()

t.x

執行結果:

self in test: <__main__.test object at 0x105c26dd0>

self in desc: <__main__.desc object at 0x105c26d10>

<__main__.desc object at 0x105c26d10> <__main__.test object at 0x105c26dd0>

此處呼叫的是t.x,也就是說是test類的例項t的屬性x,由於例項t中並沒有定義屬性x,所以找到了類屬性x,而該屬性是描述符屬性,為desc類的例項而已,所以此處並沒有頂用test的任何方法。

那麼我們如果直接通過類來呼叫屬性x也可以得到相同的結果。

下面是把t.x改為test.x執行的結果。

self in test: <__main__.test object at 0x10334cdd0>

self in desc: <__main__.desc object at 0x10334cd10>

<__main__.desc object at 0x10334cd10> none

python中的self理解

前言 先介紹下類和例項 物件導向最重要的概念就是類 class 和例項 instance 類時抽象的模板,比如學生這個抽象的事物,可以用乙個student類來表示。而例項時根據類建立出來的乙個個具體的 物件 每乙個物件都從類中繼承有相同的方法,但各自的資料可能不同 根據各自的引數來定 1 class...

關於python中self的理解

self可以這麼理解 class就是表示 汽車 然後 init 是一些汽車的基本定義,比如要有發動機,要有方向盤 在這個定義的過程中,可能需要一種引用,比如現在北京要求汽車都要裝自檢測系統,監測系統統計資料必定是某一輛車它自身的,是乙個 例項 邦定的行為,你的檢測功能不會也不允許去收集其他汽車的資料...

聊聊python類中的self

在學習python類的時候會發現幾乎無一例外的會傳入引數self,self到底是什麼呢?其實 如下 class test def prt self print self print self.class t test t.prt 結果為 main test object at 0x104b6d410...