Python 類中的特殊成員

2021-09-19 18:58:26 字數 3408 閱讀 5490

"""

class foo(object):

def __init__(self,a1,a2):

self.a1 = a1

self.a2 = a2

def __call__(self, *args, **kwargs):

print(11111,args,kwargs)

return 123

def __getitem__(self, item):

print(item)

return 8

def __setitem__(self, key, value):

print(key,value,111111111)

def __delitem__(self, key):

print(key)

def __add__(self, other):

return self.a1 + other.a2

def __enter__(self):

print('1111')

return 999

def __exit__(self, exc_type, exc_val, exc_tb):

print('22222')

"""# 1. 類名() 自動執行 __init__

# obj = foo(1,2)

# 2. 物件() 自動執行 __call__

# ret = obj(6,4,2,k1=456)

# 3. 物件['xx'] 自動執行 __getitem__

# ret = obj['yu']

# print(ret)

# 4. 物件['xx'] = 11 自動執行 __setitem__

# obj['k1'] = 123

# 5. del 物件[xx] 自動執行 __delitem__

# del obj['uuu']

# 6. 物件+物件 自動執行 __add__

# obj1 = foo(1,2)

# obj2 = foo(88,99)

# ret = obj2 + obj1

# print(ret)

# 7. with 物件 自動執行 __enter__ / __exit__

# obj = foo(1,2)

# with obj as f: #先執行__enter__方法,再執行with裡面****的**,再執行__exit__方法

# print(f)

# print('內部**')

# 8. 真正的構造方法

# class foo(object):

# def __init__(self, a1, a2): # 初始化方法

# """

# 為空物件進行資料初始化

# :param a1:

# :param a2:

# """

# self.a1 = a1

# self.a2 = a2

## def __new__(cls, *args, **kwargs): # 構造方法

# """

# 建立乙個空物件

# :param args:

# :param kwargs:

# :return:

# """

# return object.__new__(cls) # python內部建立乙個當前類的物件(初創時內部是空的.).

## obj1 = foo(1,2)

# print(obj1)

## obj2 = foo(11,12)

# print(obj2)

# __str__

class foo(object):

def __init__(self):

pass

def func(self):

pass

def __str__(self):

return "f1"

obj = foo()

print(obj,type(obj)) #直接列印obj物件會呼叫__str__方法

#__doc__

class foo(object):

"""asdfasdfasdfasdf

"""def __init__(self):

pass

def func(self):

pass

def __str__(self):

return "f1"

obj = foo()

print(obj.__doc__) #列印出注釋的內容 asdfasdfasdfasdf

__dict__

class foo(object):

def __init__(self,name,age):

self.name = name

self.age = age

def func(self):

pass

obj1 = foo('劉博文',99)

obj2 = foo('史雷',89)

#列印出物件封裝的值

print(obj1.__dict__) #

print(obj2.__dict__) #

__iter__

# l1是list類的乙個物件,可迭代物件

l1 = [11,22,33,44]

# l2是list類的乙個物件,可迭代物件

l2 = [1,22,3,44]

class foo(object):

def __init__(self,name,age):

self.name = name

self.age = age

def func(self):

pass

def __iter__(self):

# return iter([11,22,33,44,55,66])

yield 11

yield 22

yield 33

# obj1是foo類的乙個物件,可迭代物件

"""如果想要把不可迭代物件 -> 可迭代物件

1. 在類中定義__iter__方法

2. iter內部返回乙個迭代器(生成器也是一種特殊迭代器)

"""obj1 = foo('劉博文',99)

for item in obj1:

print(item)

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

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

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

類的成員有兩種形式 公有成員,在任何地方都能訪問 私有成員,只有在類的內部才能方法,私有成員命名時,前兩個字元是下劃線。class foo def init self,name,age self.name name self.age age def show self 間接方法私有字段 return...

Python 類的特殊成員方法

1.doc 描述類的資訊 class foo object 單引號和雙引號都可以 這裡描述類的資訊 def func self pass print foo.doc 這裡描述類的資訊2.call 物件後面加括號,觸發執行 call 方法的執行是由物件加括號觸發的,即 物件 或者 類 class fo...