因为一个简单的类当中的调用难住了
super 的用法和其余__init__等的区别
Python中super()和__init__()的区别 转载
小白不知道这样算不算侵权,也尽可能尽善尽美 。如果算的话 立马删
也看了些帖子,但是还是一头雾水。
总结如下
- 只是知道了 super 能快速的同时调用多个超类,而且还要求是以当前类和实例为参数,但是也可以不写。例如写成super().init()
- 只能用于新式类(可以用__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该字典中是否有列出对该索引位置有用户需改的要求,有则返回用户修改的值,否则则范围原本序列的值。