Python入门程序【九】

程序员之所以犯错误,不是因为他们不懂,而是因为他们自以为什么都懂。

try:
    r = 10 / 0
except ZeroDivisionError as e:
    print(e)
    r = 1
else:
    print('没有异常')
finally:
    print('不管有没有异常都执行')
print(r)

结果 :

division by zero
不管有没有异常都执行
1

python中的异常处理

class Fib100:
    def __init__(self):
        print("初始化")
        self._1, self._2 = 0, 1

    def __iter__(self):
        return self

    def __next__(self):
        self._1, self._2 = self._2, self._1 + self._2
        if self._1 > 1000:
            raise StopIteration()
        return self._1
    def setting(self,number1,number2):
        self._1=number1
        self._2=number2

a=Fib100()
a.setting(10,11)
for i in a:
    print(i)

# for i in Fib100():
#     print(i)

结果 :

初始化
11
21
32
53
85
138
223
361
584
945

做的一个斐波那契数列的生成器,用__next__实现,很简单,可设置起始的数,在这里我限制了最大不能超出1000

def add(self, value):
    self.append(value)

class ListMetaclass(type):
    def __new__(cls, name, bases, attrs):
        # print(cls)
        # print(name)
        # print(bases)
        # print(type(attrs))
        # attrs['add'] = lambda self, value: self.append(value)
        attrs['add'] = add
        attrs['name'] = 'Tom'
        return type.__new__(cls, name, bases, attrs)
        
class MyList(list, metaclass = ListMetaclass):  # 额外增加add方法,实际等价于append。
    pass

mli = MyList()
mli.add(1)
mli.add(2)
mli.add(3)
print(mli.name)
print(mli)

结果 :

Tom
[1, 2, 3]

实现的一个自定义的list,你也可以为他重写别的方法

class MyProperty:
    def __init__(self, fget = None, fset = None, fdel = None):
        self.fget = fget
        self.fset = fset
        self.fdel = fdel

    def __get__(self, instance, cls):
        if self.fget:
            print('__get__')
            return self.fget(instance)

    def __set__(self, instance, value):
        if self.fset:
            print('__set__')
            return self.fset(instance, value+1)

    def __delete__(self, instance):
        if self.fdel:
            return self.fdel(instance)

    def getter(self, fn):
        print("定义getter")
        self.fget = fn
        
    def setter(self, fn):
        print("定义setter")
        self.fset = fn

    def deler(self, fn):
        print("定义deler")
        self.fdel = fn
        
class Student:
    @MyProperty
    def score(self):
        return self._score

    @score.setter
    def set_score(self, value):
        #此处是第二次处理
        self._score = value+10

    @score.getter
    def get_score(self):
        #好像只有在这里才能处理
        return self._score+100

s = Student()
s.score = 1000

print(s.score)

结果:

定义setter
定义getter
__set__
__get__
1111

python中实现装饰器的方法,简单的实现get和set方法

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幽蓝丶流月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值