【python】类的特殊成员

  • 上文介绍了Python的类成员以及成员修饰符,从而了解到类中有字段、方法和属性三大类成员,并且成员名前如果有两个下划线,则表示该成员是私有成员,私有成员只能由类内部调用。无论人或事物往往都有不按套路出牌的情况,Python的类成员也是如此,存在着一些具有特殊含义的成员,详情如下:
__init__    类()自动执行
__del__
__call__    对象(),类()() 自动执行
__int__     int(obj)
__str__     str(obj)

__add__
__dict__   #将对象中封装的所有内容通过字典的形式返回

__getitem__   切片或者索引
__setitem__
__delitem__

__iter__
    如果类中有__iter__方法,对象===》》可迭代对象
    对象.__iter__() 的返回值:迭代器
    for循环,迭代器,next方法
    for循环,可迭代对象,对象.__iter__() ,迭代器,next方法
    1、执行Li对象的类Foo类中的__iter__方法,并获取其返回值
    2、循环上一步中返回的对象
  • 1.call,对象后面加括号,触发执行。
class Foo:
    def __init__(self):
        print('init')
    def __call__(self, *args, **kwargs):
        print('call')
obj = Foo()
obj()   #对象()自动执行__call__方法
  • 2.str,如果一个类中定义了__str__方法,那么在打印 对象 时,默认输出该方法的返回值。
class Foo:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def __str__(self):
        return '%s-%s'%(self.name,self.age)
obj = Foo('xwl',23)
print(obj)    #print(str(obj))--->>str(obj)--->>obj中的__str__,并获取返回值
  • 3.dict,类或对象中的所有成员
class Foo:
    """
        描述
    """
    def __init__(self,name,age):
        self.name = name
        self.age = age
obj = Foo('xwl',18)
b = obj.__dict__   # {'name': 'xwl', 'age': 18}
print(b)
ret = Foo.__dict__
print(ret)
#{'__module__': '__main__', '__doc__': '\n        描述\n    ', 
# '__init__': <function Foo.__init__ at 0x000002AA9219C820>, '__dict__': <attribute '__dict__' of 'Foo' objects>, 
# '__weakref__': <attribute '__weakref__' of 'Foo' objects>}

-4.getitemsetitemdelitem,用于索引操作,如字典。以上分别表示获取、设置、删除数据

class Foo:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def __getitem__(self, item):
        return item+10
    def __setitem__(self, key, value):
        print(key,value)
    def __delitem__(self, key):
        print(key)
Li = Foo('xwl',18)
r = Li[1]   #自动执行Li对象中的__getitem__方法
print(r)    # 11
Li[100] = 'dasdfd'   #自动执行Li对象中的__setitem__方法    # 100 dasdfd
del Li[999]             #自动执行Li对象中的__delitem__方法   # 999
  • 5.iter ,用于迭代器,之所以列表、字典、元组可以进行for循环,是因为类型内部定义了 iter
class Foo:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def __iter__(self):
        return iter([11,22,33,44])
Li = Foo('xwl',18)
#如果类中有__iter__方法,对象===》》可迭代对象
#对象.__iter__() 的返回值:迭代器
#for循环,迭代器,next方法
#for循环,可迭代对象,对象.__iter__() ,迭代器,next方法
#1、执行Li对象的类Foo类中的__iter__方法,并获取其返回值
#2、循环上一步中返回的对象
for i in Li:
    print(i)
posted @ 2024-08-21 22:51  Tony_xiao  阅读(2)  评论(0编辑  收藏  举报