Перейти к содержанию

07 Объекты (Практика)

Собственный класс

class Account:
    def __init__(self, account_number, account_type, initial_balance):
        self.account_number = account_number
        self.account_type = account_type
        self.balance = initial_balance

    def deposit(self, amount):
        # should also check that amount is a numerical value!
        if amount > 0:
            self.balance = self.balance + amount
            print(f'Deposited {amount}')
            print(f'New balance is: {self.balance}')
        else:
            print(f'{amount} is an invalid amount.')

    def withdraw(self, amount):
        # should also check that amount is a numerical value!
        if amount > 0 and amount <= self.balance:
            self.balance = self.balance - amount
            print(f'Withdrawal: {amount}')
            print(f'New Balance: {self.balance}')
        else:
            if amount < 0:
                print(f'{amount} is an invalid amount')
            else:
                print('Insufficient funds.')
                print(f'Current balance is {self.balance}')

Создание объекта класса Account

my_account = Account("123-456", "saving", 1000.00)

Объект имеет аттрибуты: состояние и методы.

Получение состояния

my_account.account_number # '123-456'

my_account.account_type # 'saving'

my_account.balance # 1000.0

Вызов методов

my_account.deposit(1000)
# Deposited 1000
# New balance is: 2000.0

my_account.withdraw(500)
# Withdrawal: 500
# New Balance: 1500.0

integer и float тоже объекты

Запись 10 + 15 может быть записана в виде вызова метода

(10).__add__(25) # 35

А float имеет метод отображения числа в виде дроби

(0.125).as_integer_ratio() # (1, 8)

Число 0.1 не имеет точного представления. Не смотря на то, что Python показывает число 0.1 как 0.1

0.1 # 0.1

На самом деле там хранится число близкое к 0.1

format(0.1, ".25f") # '0.1000000000000000055511151'

Поэтому если вызвать метод as_integer_ratio, то получится следующий результат

(0.1).as_integer_ratio() # (3602879701896397, 36028797018963968)