Python——类的魔法属性

目录

__doc__

__module__和__class__

__init__

__del__

__call__

__dict__

__str__

__getitem__/__setitem__/__delitem__

__getslice__/__setslice__/__delslice__


__doc__

表示类的描述信息

__module__和__class__

__module__:表示当前操作的对象在哪个模块

__class__:表示当前操作的对象的类时什么

__init__

初始化方法,通过类创建对象时,自动触发执行

__del__

当对象在内存中被释放时,自动触发执行

注:此方法一般无需定义,因为python是高级语言,程序员无需关心内存的分配和释放,因此工作都是交给python解释器来执行,所以,__del__的调用时由解释器在进行垃圾回收时自动触发执行的。

__call__

对象后面加括号,触发执行

注意:__init__方法的执行是由创建对象触发的,即:对象=类名();而对于__call__方法的执行是由对象后加括号触发的,即:对象()或者类()()

# -*- encoding=utf-8 -*-

class Foo(object):
    def __init__(self):
        pass

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

c = Foo()
c()
Foo()()

__dict__

类或对象中的所有属性

类的实例属性属于对象;类中的类属性和方法等属于类。

# -*- encoding=utf-8 -*-

class Foo(object):
    country = "douzi"

    def __init__(self, name, count):
        self.name = name
        self.count = count

    def func(self, *args, **kwargs):
        print("func")

# 获取类的属性,即:类属性,方法
print(Foo.__dict__)

# 获取对象obj1的属性
obj1 = Foo("test", 134)
print(obj1.__dict__)

__str__

如果一个类中定一个__str__方法,那么在打印对象时,默认输出该方法的返回值。

class Foo(object):
    def __str__(self):
        return "douzi"

t = Foo()
print(t) 

__getitem__/__setitem__/__delitem__

用于索引操作,如字典。以上分别为获取、设置、删除数据。

表示实现了该三个方法,该类即当列表用。

class Foo(object):

    def __getitem__(self, item):
        print("__getitem__:", item)

    def __setitem__(self, key, value):
        print("__setitem__:", key, value)

    def __delitem__(self, key):
        print("__delitem__:", key)

obj = Foo()

res = obj["k1"]       # 自动触发执行 __getitem__
obj["k2"] = "douzi"   # 自动触发执行 __setitem__
del obj["k1"]         # 自动触发执行 __delitem__

__getslice__/__setslice__/__delslice__

该三个方法用于分片操作,如:列表

class Foo(object):

    def __getslice__(self, i, j):
        print("__getslice__:", i, j)

    def __setslice__(self, i, j, sequence):
        print("__setslice__:", i, j, sequence)

    def __delslice__(self, i, j):
        print("__delslice__:", i, j)


obj = Foo()

obj[0:2]
obj[0:2] = [11, 22, 33, 44]
del obj[0:2]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值