美文网首页
033 Python语法之类的专有方法

033 Python语法之类的专有方法

作者: Luo_Luo | 来源:发表于2017-09-12 11:27 被阅读0次

    类的专有方法

    __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()方法

    相关文章

      网友评论

          本文标题:033 Python语法之类的专有方法

          本文链接:https://www.haomeiwen.com/subject/uthcsxtx.html