Skip to content

Instantly share code, notes, and snippets.

@mercuryseries
Created November 24, 2016 06:16
Show Gist options
  • Save mercuryseries/2e915629009705e89e9487d20333a00c to your computer and use it in GitHub Desktop.
Save mercuryseries/2e915629009705e89e9487d20333a00c to your computer and use it in GitHub Desktop.
OOP with Python
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