小白 Python求学之路(鬼知道是第几天。。。)

因为一个简单的类当中的调用难住了
super 的用法和其余__init__等的区别
Python中super()和__init__()的区别 转载
小白不知道这样算不算侵权,也尽可能尽善尽美 。如果算的话 立马删
也看了些帖子,但是还是一头雾水。
总结如下

  1. 只是知道了 super 能快速的同时调用多个超类,而且还要求是以当前类和实例为参数,但是也可以不写。例如写成super().init()
  2. 只能用于新式类(可以用__class__来获取自身属性

https://blog.csdn.net/u010066807/article/details/46896835
1、新式类能直接用__class__来获取自身属性
2、新式类在调用时优先横向搜索,旧式类则是优先深度搜索
3. 新式类增加了__slots__内置属性, 可以把实例属性的种类锁定到__slots__规定的范围之中。
class A(object):
slots = (‘name’, ‘age’)
4. 新式类增加了__getattribute__方法

# 新式类
class Base(object):
    def __init__(self):
        print 'Base create'
# 旧式类
class Base():
    def __init__(self):
        print 'Base create'
# NewClass.__class__ = type(NewClass )
# 是否创建一个无穷序列

def check_index(key):
    """
    键必须是非负整数,
    若不是整数 会报 TypeError 
    若是负数 引发 IndexError 
    """
    if not isinstance(key,int):
        raise TypeError
    if key < 0:
        raise IndexError
class ArithmeticSequence(list):
    def __init__(self,start = 0,step = 1 ):
        # 初始化这个算数序列 
        """
        start 序列中的第一个值
        step 相邻值的差
        changed 一个字典,包含用户修改后的值
        """
        self.start = start # 存储起始值 和 步长值 没有任何元素被修改
        self.step = step 
        self.changed = {}
    def __getitem__(self,key):   
        """
        从算数序列中获取一个元素
        """
        check_index(key)      #验证key是否为非负整数
        try:
            return self.changed[key]     # 如修改过,即self.changed[key] 没问题,返回self.changed
        except KeyError:                   # 如没有修改过, 即出现KeyError这种错误,即执行以下
            return self.start + key * self.step  # 就计算元素的值
    def __setitem__(self,key,value):
            """
            修改算数中的序列
            """
            check_index(key)
            self.changed[key] = value #存储修改后的值
            
"""
实现了一个 算数序列:任意相邻的数字的差相同,第一个值是有start指定,步长也是由step指定,
允许用户修改某些 元素!,这是通过将不符合规则的值来保存在字典changed中实现的。如果元素
未被修改,就用公式 self.start + key * self.step来计算它的值
"""
## 下面使用
s = ArithmeticSequence(1,2)   # 初始化 起始值 步长 start = 1, step = 2
s[4]
            
"""
实现了一个 算数序列:任意相邻的数字的差相同,第一个值是有start指定,步长也是由step指定,
允许用户修改某些 元素!,这是通过将不符合规则的值来保存在字典changed中实现的。如果元素
未被修改,就用公式 self.start + key * self.step来计算它的值
"""
## 下面使用
s = ArithmeticSequence(1,2)   
# 初始化 起始值 步长 start = 1, step = 2
s[4]

其实只是在索引的时候才开始确定一个数。
先校验在changed该字典中是否有列出对该索引位置有用户需改的要求,有则返回用户修改的值,否则则范围原本序列的值。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值