python類成員 Python 類的特殊成員解析

2021-10-11 00:10:02 字數 4110 閱讀 1523

類的成員有兩種形式

公有成員,在任何地方都能訪問

私有成員,只有在類的內部才能方法,私有成員命名時,前兩個字元是下劃線。

class foo:

def __init__(self, name, age):

self.name = name

self.__age = age

def show(self): # 間接方法私有字段

return self.__age

obj = foo('klvchen', 25)

print(obj.name)

res = obj.show()

print(res)

執行結果:

klvchen

公有靜態字段:類可以訪問;類內部可以訪問;派生類中可以訪問

私有靜態字段:僅類內部可以訪問;

class foo:

__v = '666' # 私有靜態字段

def __init__(self):

pass

def show(self):

return foo.__v

obj = foo()

res = obj.show()

print(res)

執行結果:

class foo:

__v = '666'

def __init__(self):

pass

def show(self):

return foo.__v

@staticmethod

def stat():

return foo.__v

res = foo.stat()

print(res)

執行結果:

無法從父類繼承私有字段

class f:

def __init__(self):

self.ge = 123

self.__gene = 456 #私有字段

class s(f):

def __init__(self, name):

self.name = name

self.__age = 18

super(s, self).__init__()

def show(self):

print(self.name)

print(self.__age)

print(self.ge)

print(self.__gene)

s = s('klvchen')

s.show()

執行結果:

klvchen

attributeerror: 's' object has no attribute '_s__gene'

類的特殊成員

int(物件),會自動執行物件中的__int__方法,並將返回賦值給 int 物件,同理 str(物件),會自動執行__str__方法,並返回賦值給 str 物件。

class foo:

def __init__(self):

pass

def __int__(self):

return 666

def __str__(self):

return 'hello world'

obj = foo()

print(obj, type(obj))

res = int(obj)

print(res)

res1 = str(obj)

print(res1)

執行結果:

<__main__.foo object at 0x0000022bbe9da978>

hello world

print(物件),str(物件),都會自動執行物件中的__str__方法,並返回

class foo:

def __init__(self, n, a):

self.name = n

self.age = a

def __str__(self):

return '%s-%d' %(self.name, self.age)

obj = foo('klvchen', 28)

print(obj)

執行結果:

klvchen-28

兩個物件相加時,自動執行第一物件的__add__方法,並且將第二個物件當引數傳遞進去

class foo:

def __init__(self, name, age):

self.name = name

self.age = age

def __add__(self, other):

return self.age + other.age

obj1 = foo('klv1', 23)

obj2 = foo('klv2', 24)

res = obj1 + obj2

print(res, type(res))

執行結果:

47 class foo:

def __init__(self, name, age):

self.name = name

self.age = age

def __add__(self, other):

return foo(obj1.name, obj2.age)

def __del__(self):

print('析構方法')

obj1 = foo('klv1', 23)

obj2 = foo('klv2', 24)

res = obj1 + obj2

print(res, type(res))

執行結果:

<__main__.foo object at 0x0000016dfce125c0>

析構方法

析構方法

析構方法

li[物件] 會自動執行 li 物件的類中的__getitem__方法,8當作引數傳遞給item

class foo:

def __init__(self, name, age):

self.name = name

self.age = age

def __getitem__(self, item):

return item

li = foo('klvchen', 28)

r = li[8]

print(r)

執行結果:

類中的__setitem__,__delitem__方法

class foo:

def __init__(self, name, age):

self.name = name

self.age = age

def __getitem__(self, item):

return item

def __setitem__(self, key, value):

print(key, value)

def __delitem__(self, key):

print(key)

li = foo('klvchen', 28)

r = li[8]

print(r)

li[100] = 'hello'

del li[999]

執行結果:

100 hello

執行類中的__iter__()方法,並獲取其返回值,迴圈上一步中返回物件,用於迭代器,之所以列表、字典、元組可以進行for迴圈,是因為型別內部定義了iter

class foo:

def __init__(self, name, age):

self.name = name

self.age = age

def __iter__(self):

return iter([11, 22, 33])

li = foo('klvchen', 26)

for i in li:

print(i)

執行結果:

for 迴圈的內部操作

obj = iter([11, 22, 33])

while true:

val = obj.next()

print val

總結

python類的成員 Python類成員

乙個是乙個類屬性,另乙個是乙個例項屬性。它們是不同的,但是它們之間的關係密切相關,使得它們在時間上看起來一樣。它與python查詢屬性的方式有關。有層次結構。在簡單的情況下,它可能如下所示 instance subclass superclass object built in type 當你在這樣...

python類成員 Python類之類的成員

對於乙個學c 的朋友來說,python類中,哪些是私有成員,哪些是共有成員,估計一直傻傻分不清。一 本篇部落格要解決的問題 python類中,哪些是私有成員?哪些是共有成員?二 關於python的類 所以,你寫的型別其本身有屬性和方法,而型別對應的例項,也有自己的屬性,不過並沒有方法。也就是說,py...

python類的成員 python 類的特殊成員

上文介紹了python的類成員以及成員修飾符,從而了解到類中有字段 方法和屬性三大類成員,並且成員名前如果有兩個下劃線,則表示該成員是私有成員,私有成員只能由類內部呼叫。無論人或事物往往都有不按套路出牌的情況,python的類成員也是如此,存在著一些具有特殊含義的成員,詳情如下 1.doc 表示類的...