import hashlib import os class BankAccount: def __init__(self, name, balance): self.name = name self.__balance = balance @property def my_balance(self): return self.__balance @my_balance.setter def my_balance(self, value): if not isinstance(value, (int, float)): raise ValueError('Баланс должен быть числом') @my_balance.deleter def my_balance(self): del self.__balance class MagicBox: def __init__(self, contents=None): self._contents = contents @property def contents(self): if self._contents == "rabbit": return "A magical rabbit!" else: return self._contents @contents.setter def entity(self, new_contents): if new_contents == "wishes": print("Your wishes are granted!") self._contents = new_contents else: print("the magic didn't work this time.") self._contents = new_contents class Celsius: def __init__(self, temp) -> None: self.__temperature = temp def to_fahrenheit(self): return self.__temperature*9/5 + 32 @property def temperature(self): return self.__temperature @temperature.setter def temperature(self, value): if value < -273.15: raise ValueError("Температура должна быть больше 273.15") else: self.__temperature = value class File: def __init__(self, size_in_bytes): self._size_in_bytes = size_in_bytes @property def size(self): if self._size_in_bytes < 1024: return f"{self._size_in_bytes} B" elif self._size_in_bytes < 1048576: return "%.2f KB" % (self._size_in_bytes/1024.0) elif self._size_in_bytes < 1073741824: return "%.2f MB" % (self._size_in_bytes/1048576.0) else: return "%.2f GB" % (self._size_in_bytes/1073741824.0) @size.setter def size(self, value): self._size_in_bytes = value class Notebook: def __init__(self, notes: list): self._notes = notes @property def notes_list(self): for i, j in enumerate(self._notes): print(f"{i+1}.{j}") class User: def __init__(self, name, password) -> None: self.name = name self.password = password @property def password(self): raise AttributeError("Пароль можно только менять, нельзя смотреть") @password.setter def password(self, plaintext): salt = os.urandom(32) self._hashed_password = hashlib.pbkdf2_hmac( "sha256", plaintext.encode("utf-8"), salt, 100_000 ) class Money: def __init__(self, dollars, cents): # self.total_cents = 0 self.total_cents = dollars*100 + cents @property def dollars(self): return self.total_cents//100 @dollars.setter def dollars(self, value): if not isinstance(value, (int)): print("Error dollars") return if value < 0: print("Error dollars") return else: self.total_cents = self.total_cents%100 + value*100 @property def cents(self): return self.total_cents%100 @cents.setter def cents(self, value): if not isinstance(value, (int)): print("Error cents") elif value < 0 or value > 100: print("Error cents") else: self.total_cents = (self.total_cents//100)*100 + value def __str__(self) -> str: return f"Ваше состояние составляет {self.total_cents//100} долларов {self.total_cents%100} центов" def main(): # acc = BankAccount('Ivan', 200) # print(acc.my_balance) ''' note = Notebook(['Buy Potato', 'Buy Carrot', 'Wash car']) note.notes_list ''' bill = Money(101, 99) assert isinstance(bill, Money) print(bill.__dict__.keys()) print(bill) # Ваше состояние составляет 101 долларов 99 центов print(bill.dollars, bill.cents) # 101 99 print(bill.total_cents) bill.dollars = 666 print(bill.total_cents) print(bill) # Ваше состояние составляет 666 долларов 99 центов bill.cents = 12 print(bill.total_cents) print(bill) # Ваше состояние составляет 666 долларов 12 центов print(bill.total_cents) assert bill.total_cents == 66612 assert list(bill.__dict__.keys()) == ['total_cents'] ken = Money(111, 90) assert isinstance(ken, Money) print(ken) ken.dollars = 'hello' # Error dollars ken.dollars = 0 print(ken) ken.cents = [1, 2, 3] # Error cents ken.cents = 100 # Error cents ken.cents = 99 print(ken) ''' box = MagicBox("rubies") print(box.contents) print(box._contents) box.entity = "wishes" print(box._contents) print(box.entity) ''' ''' cel = Celsius(12.0) cel.temperature = 15 cel.temperature = -300 print(cel.temperature) ''' if __name__ == '__main__': main()