033 Python语法之类的专有方法

类的专有方法

__init__ :构造函数,在生成对象时调用
__del__ :析构函数,释放对象时使用
__repr__ :打印,转换
__setitem__ :按照索引赋值
__getitem__:按照索引获取值
__len__:获得长度
__cmp__:比较运算
__call__:函数调用
__add__:加运算
__sub__:减运算
__mul__:乘运算
__div__:除运算
__mod__:求余运算
__pow__:乘方

__str__方法(str())

  1. str不重写打印的是地址
  2. 重写这个方法会打印你设置的返回值,必须返回字符串

__repr__方法

__iter__方法(iter())

__next__方法(it.next())

class 女神备胎:
    def __init__(self):
        self.num = 1

    def __iter__(self):
        return self

    def __next__(self):
        self.num += 1
        if self.num > 108:
            raise StopIteration # 用for循环不会报错,只会停止
        return self.num


for i in 女神备胎():
    print(i)

__getitem__方法(list[n[:m]])

class 集合:
    def __getitem__(self, item):
        list1 = [1, 2, 3, 4, 3, 2, 1]
        if isinstance(item, int):
            return list1[item]
        elif isinstance(item, slice):  # 切片
            return list1[item]


jihe = 集合()
for i in jihe:
    print(i)

print(jihe[1:3])

__call__方法(把对象当做一个函数用)

class PaoNiu:
    def __init__(self,name):
        self.name = name

    def __call__(self):
        print("我被调用了")

paoNiu = PaoNiu("Luo")
paoNiu()

__lt__方法(对象之间进行对比,返回True False)

print(cmp(1,2))# python3被弃用了这个方法
# 覆盖了这个方法之后就可以排序了,也可以用lambda对类的某个属性进行排序
def __lt__(self, value):    
    return self.num < value.num

hasattr(对象,方法字符串)

  1. 判断是否有该属性/方法

__getattr__方法(获取动态设置的属性的值,重写 对象.属性 运算)

__getattr__(self, attr):

__setattr__方法(self, attr, data)

def __setattr__(self, attr, data):
    if attr=="tall":
        raise "不能进行赋值"
    else:
        super().__setattr__(attr, data)

delattr()方法(删除属性)

def __delattr__(self,attr):
    if attr=="money":
        raise Exception("不能删除money")
    super().__delattr__(attr)

contains()方法(判断数据是否在)

def __contains__(self,data):
    return data in self.list

index()方法(返回进制)

def __index__(self,data):
    return data in self.list

new()方法(拦截对象创建,返回一个对象)

class B:
    pass
    
class A:
    def __new__(self):
        return B()
    
    def __init__(self):
        

new方法

  1. new是用来创建实例的,object里面自动调用了,你如果需要重写,必须要返回object.new(cls)
  2. call来创建new,new来创建init

metaclass方法

  1. 定义这个类如何被创建
  2. metaclass = MyType

get()方法

set()方法

delete()方法

发布了151 篇原创文章 · 获赞 26 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/runnoob_1115/article/details/102822856