TI/Skrypty z zajęć/kz7-9
Z Brain-wiki
# -*- coding: utf-8 -*-
"""
Created on Tue May 26 11:12:02 2020
@author: Tomek
"""
'''
Zadanie 7
Napisze klasę InnyNawias. Konstruktor klasy przyjmuje jeden parametr:
jednoargumentową funkcję f. Zapisz otrzymaną funkcję w zmiennej prywatnej.
Zaimplementuj metodę __getitem__(x), która ma zwracać f(x).
'''
#zadanie 7
class InnyNawias():
def __init__(self, f):
self.__f = f
def __getitem__(self, x):
return self.__f(x)
def fun(x):
return x*x
z = InnyNawias(fun)
'''
Zadanie 8
Napisz klasę CiągArtymetyczny, która:
-przyjmuje w konstruktorze dwa argumenty a1 oraz r, które są pierwszym
elementem ciągu oraz różnicą ciągu. Zachowaj argumenty w zmiennych prywatnych,
ale zapewnij do nich dostęp poprzez property.
-ma zaimplementowaną metodę __getitem__, która zwraca odpowiedni element ciągu
(lub None, gdy jej argument nie jest liczbą naturalną)
- Ma zaimplementowaną metodę dodawania ciągów arytmetycznych
'''
#zadanie 8
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 > 0):
return self.__a1 + (n-1)*self.__r
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)
z = CiagArytmetyczny(1,1)
x = CiagArytmetyczny(100,1)
#print(x+z)
'''
Zadanie 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.
'''
class CiagArytmetycznyZeSlownikiem(CiagArytmetyczny):
def __setitem__(self, key, value):
if not ('_CiagArytmetycznyZeSlownikiem__sl' in dir(self)):
self.__sl = {}
self.__sl[key] = value
@property
def sl(self):
if not ('_CiagArytmetycznyZeSlownikiem__sl' in dir(self)):
self.__sl = {}
return self.__sl.copy()
def __str__(self):
return 'CiagArytmetycznyZeSlownikiem a1 = '+str(self.a1)+' r = '+str(self.r)
def __add__(self, other):
return CiagArytmetycznyZeSlownikiem(self.a1 + other.a1, self.r + other.r)
y = CiagArytmetycznyZeSlownikiem(50,1)