Created
November 24, 2016 06:16
-
-
Save mercuryseries/2e915629009705e89e9487d20333a00c to your computer and use it in GitHub Desktop.
OOP with Python
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class BankAccount(): | |
def __init__(self, first_name, last_name, balance=0): | |
self.__first_name = first_name | |
self.__last_name = last_name | |
self.__balance = balance | |
def withdraw(self, amount): | |
if(self.balance < amount): | |
return False | |
self.__balance -= amount | |
return True | |
def credit(self, amount): | |
if(amount < 0): | |
return False | |
self.__balance += amount | |
return True | |
@property | |
def first_name(self): | |
return self.__first_name | |
@property | |
def last_name(self): | |
return self.__last_name | |
@property | |
def balance(self): | |
return self.__balance | |
def __str__(self): | |
return "{} {}".format(self.first_name, self.last_name) | |
class Person(): | |
def __init__(self, first_name, last_name): | |
self.__first_name = first_name | |
self.__last_name = last_name | |
self.__bank_account = None | |
def create_bank_account(self, initial_amount=0): | |
self.__bank_account = BankAccount(self.first_name, self.last_name, initial_amount) | |
def has_bank_account(self): | |
return self.bank_account is not None | |
@property | |
def first_name(self): | |
return self.__first_name | |
@property | |
def bank_account(self): | |
return self.__bank_account | |
@property | |
def last_name(self): | |
return self.__last_name | |
@property | |
def balance(self): | |
if(self.has_bank_account()): | |
return self.bank_account.balance | |
raise NotImplementedError | |
def purchase(self, cart): | |
if(self.has_bank_account()): | |
return self.bank_account.withdraw(cart.total_price()) | |
raise NotImplementedError | |
def __str__(self): | |
return "{} ({})".format(self.first_name, self.last_name) | |
class Item(): | |
def __init__(self, name, price, quantity): | |
self.__name = name | |
self.__price = price | |
self.__quantity = quantity | |
@property | |
def quantity(self): | |
return self.__quantity | |
def total_price(self): | |
return self.__price * self.__quantity | |
def __str__(self): | |
return "{} x{} = {}".format( | |
self.__name, | |
self.__quantity, | |
self.total_price() | |
) | |
class Cart(): | |
def __init__(self, items=[]): | |
self.__items = items | |
def add_item(self, item): | |
self.__items.append(item) | |
def add_items(self, items): | |
self.__items.extend(items) | |
@property | |
def items(self): | |
return self.__items | |
def total_quantity(self): | |
total_quantity = 0 | |
for item in self.items: | |
total_quantity += item.quantity | |
return total_quantity | |
def total_price(self): | |
total_price = 0 | |
for item in self.items: | |
total_price += item.total_price() | |
return total_price | |
def __str__(self): | |
return str([str(item) for item in self.items]) | |
################################ | |
honore = Person('Honore', 'Hounwanou') | |
# honore.create_bank_account(10000) | |
item1 = Item('Mac Book Pro', 3500, 1) | |
item2 = Item('Keyboard', 50, 1) | |
cart = Cart([item1, item2]) | |
cart.add_item(Item('Microphone', 250, 1)) | |
item4 = Item('USB Key', 30, 3) | |
item5 = Item('MacBook Pro', 3900,1) | |
cart.add_items([item4, item5]) | |
print(cart) | |
print(honore.balance) | |
print(cart.total_price()) | |
print(honore.purchase(cart)) | |
print(honore.balance) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment