python 中的魔法函数

1. __init__ 添加类属性

2.__str__  修改类的描述

3.__mro__  只能调用  打印当前类的父结构

4.__iter__ 把类变成可迭代对象

5.__next__把类变成迭代器

6.__getitem__ 可以把类变成可以类似列表  可以从中获取指定下标的值

7.__getattr__ 如果属性或者函数不存在的情况下  不会报错 回在控制台上显示相关信息

8.__call__ 让类可以直接调用  相当于把类变成函数

9.callable  判断对象是否是可以调用的对象

class Python(object):
    def __init__(self, xname):
        self.name = xname
        # 斐波拉且数列 前两个值是固定的
        self.a, self.b = 0, 1

    # 用于定制对象的描述
    def __str__(self):
        return 'Python  object (name,%s)' % self.name

    # person默认不是可迭代对象,变成一个可迭代对象,必须返回一个迭代器
    def __iter__(self):  # 生成一个斐波拉且数列
        return self

    # person变成一个迭代器
    def __next__(self):
        self.a, self.b = self.b, self.a + self.b
        if self.a > 1000:  # 如果出现一个大于1000的数字   退出循环
            raise StopIteration  # 主动报错  停止循环
        return self.a

    # preson 可以类似于list
    def __getitem__(self, item):  # item  可能一个下标   可能是一个切片
        if isinstance(item, int):   # 判断传过来是否是一个整数  下标
            a, b = 1, 1
            for x in range(item):
                a, b = b, a+b
            return a
        elif isinstance(item, slice):   # slice  是一个切片 判断传回来的是不是一个切片
            start = item.start
            stop = item.stop
            if start is None:  # 判断时候是一个空类型
                start = 0  # start  是一个默认值
            a, b = 1, 1
            l = []
            for x in range(stop):
                if x >= start:
                    l.append(a)
                a, b = b, a+b
            return l

    # 当访问 person 对象中不存在的属性和函数的时候会抛出 AttributrError  如果不想看到报错 就要重写
    def __getattr__(self, item):
        if item == 'age':
            return 18
        elif item == 'eat':
            return lambda :print('eat函数执行')

    def __call__(self, *args, **kwargs):
        print('person可以任意调用')


if __name__ == '__main__':
    p = Python('张三')
    print(p)

    for n in p:
        print(n)

    # p类似于一个list  在list还可以分片
    print(p[5])
    print(p[5:10])

    print(p.age)
    print(p.eat())

    p()
    print(callable(p))  # 判断p对象是否为可调用的对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值