TI/Skrypty z zajęć/kz15-17
Z Brain-wiki
# -*- coding: utf-8 -*-
'''
Zadanie 15
Przepisz klasę ciąg arytmetyczny z zadania 8, tak by zwracała odpowideni wyjątek przy odwołaniu się do niewłasciwego elementu
'''
class CiagArytmetyczny():
def __init__(self, a1, r):
self.__a1 = float(a1)
self.__r = float(r)
def __get_a1__(self):
return self.__a1
def __get_r__(self):
return self.__r
def __set_a1__(self, a1):
self.__a1 = float(a1)
def __set_r__(self, r):
self.__r = float(r)
a1 = property(__get_a1__,__set_a1__)
r = property(__get_r__,__set_r__)
def __getitem__(self,n):
if isinstance(n,int):
if n < 1: raise IndexError
return self.__a1 + (n-1)*self.__r
raise TypeError
def __add__(self, other):
return CiagArytmetyczny(self.a1 + other.a1, self.r + other.r)
def __str__(self):
return 'CiagArytmetyczny a1 = '+str(self.__a1)+' r = '+str(self.__r)
def __repr__(self):
return str(self)
'''
Zadanie 16
Początek jak w zadaniu 9:
"Napisz klasę CiągArytmetycznyZeSlownikiem, która dziedziczy po klasie
CiągArtymetyczny. Zaimplementuj w niej metodę __setitem__, która będzie
zapisywać wywołane klucze i wartości do prywatnego słownika.
Klasa powinna zapewniać dostęp do tego słownika, ale bez możliwości jego edycji."
ale tym rezem można już używać super(). Nadpisz również metodę __getitem__ tak, by zwracała wartosci wczesniej przypisane
przez __setitem__. Skorzystaj z try except
'''
class CiagArytmetycznyZeSlownikiem(CiagArytmetyczny):
def __init__(self,*args, **kwargs):
super().__init__(*args, **kwargs)
self.__sl = {}
def __setitem__(self, key, value):
self.__sl[key] = value
@property
def sl(self):
return self.__sl.copy()
def __str__(self):
return 'CiagArytmetycznyZeSlownikiem a1 = '+str(self.a1)+' r = '+str(self.r)
def __getitem__(self,n):
try:
return self.__sl[n]
except:
return super().__getitem__(n)
'''
Zadanie 17
Napisz dekorator mierzący czas działania funkcji i wypisujący ten czas przy każdym wywołaniu.
'''
import time
def timeit(fun):
def f(*args, **kwargs):
start = time.time()
result = fun(*args, **kwargs)
stop = time.time()
print('Obliczenie trwalo',stop-start,'s')
return result
return f