功能点

多重继承
定制类
getattr
class Student(object):
def __init__(self):
self.name = 'tan'
def __getattr__(self, item):
if item == 'score':
return 99
else:
return '其他'
s = Student()
print(s.name)
print(s.a)
print(s.score)
class Student(object):
def __init__(self, name):
self.name = 'tan'
def __call__(self, *args, **kwargs):
print('my name is %s.' % self.name)
s = Student('tan')
s()
print(callable(Student('aa')))
print(callable(max))
print(callable([1, 2, 3, 4]))
print(callable(None))
print(callable('str'))
getitem
class Fib(object):
def __init__(self):
self.a, self.b = 0,5
def __iter__(self):
return self
def __next__(self):
self.a, self.b = self.b, self.a + self.b
if self.a > 1000:
raise StopIteration()
return self.a
def __getitem__(self, item):
a, b = 1, 1
for x in range(item):
a, b = b, a+b
return a
def __getitem__(self, n):
if isinstance(n, int):
a, b = 1, 1
for x in range(n):
a, b = b, a + b
return a
if isinstance(n, slice):
start = n.start
stop = n.stop
if start is None:
start = 0
a, b = 1, 1
L = []
for x in range(stop):
if x >= start:
L.append(a)
a, b = b, a + b
return L
print(Fib()[5])
for n in Fib():
print(n)
print(Fib()[1:5])
iter next
class Fib(object):
def __init__(self):
self.a, self.b = 0,1
def __iter__(self):
return self
def __next__(self):
self.a, self.b = self.b, self.a + self.b
if self.a > 1000:
raise StopIteration()
return self.a
for n in Fib():
print(n)
repr
class Student(object):
def __init__(self, name):
self.name = name
def __str__(self):
return 'Student object (name: %s)' % self.name
__repr__ = __str__
s = Student('tan')
print(s)
str
class Student(object):
def __init__(self, name):
self.name = name
def __str__(self):
return 'Student object (name: %s)' % self.name
print(Student('tan'))