類的成員有兩種形式
公有成員,在任何地方都能訪問
私有成員,只有在類的內部才能方法,私有成員命名時,前兩個字元是下劃線。
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 表示類的...