Compararea moștenirii și reprezentarea ca șir

Introducere în Programarea Orientată pe Obiecte în Python

George Boorman

Curriculum Manager, DataCamp

Compararea obiectelor din clase diferite

class Customer:
    def __init__(self, acc_id, name):
        self.acc_id, self.name = acc_id, name

    def __eq__(self, other):
        # Returns True if the objects have the same attributes
        # and are of the same type
        return (self.acc_id == other.acc_id) and (self.name == other.name)\
            and (type(self) == type(other))
Introducere în Programarea Orientată pe Obiecte în Python

Compararea obiectelor cu moștenire

 

 

 

                               

    Ce se întâmplă dacă un obiect moștenește din clasa celuilalt obiect?

Introducere în Programarea Orientată pe Obiecte în Python

Conturi bancare și de economii

SavingsAccount moștenind din BankAccount

Introducere în Programarea Orientată pe Obiecte în Python

__eq__ în clasele părinte/copil

class BankAccount:
    def __init__(self, number, balance=0):
        self.balance = balance
        self.number = number

    def withdraw(self, amount):
        self.balance -= amount 

    # Define __eq__ that returns True 
    # if the number attributes are equal 
    def __eq__(self, other):
        print("BankAccount __eq__() called")
        return self.number == other.number 
class SavingsAccount(BankAccount):
    def __init__(self, number, balance, interest_rate):
        BankAccount.__init__(self, number,
                             balance)
          self.interest_rate = interest_rate

    # Define __eq__ that returns True 
    # if the number attributes are equal 
    def __eq__(self, other):
        print("SavingsAccount __eq__() called")
        return self.number == other.number 
Introducere în Programarea Orientată pe Obiecte în Python

Compararea obiectelor părinte și copil

ba = BankAccount(123, 10000)
sa = SavingsAccount(456, 2000, 0.05)
# Compare the two objects
ba == sa
SavingsAccount __eq__() called
False
sa == ba
SavingsAccount __eq__() called
False
Introducere în Programarea Orientată pe Obiecte în Python

Afișarea unui obiect

class Customer:
    def __init__(self, name, balance):
        self.name, self.balance = name, balance 

cust = Customer("Maryam Azar", 3000)
print(cust)
<__main__.Customer at 0x1f8598e2240>




a_list = [1,2,3]
print(a_list)
[1, 2, 3]
Introducere în Programarea Orientată pe Obiecte în Python

__str__()

  • print(obj), str(obj)
print(np.array([1,2,3]))
[1 2 3]
str(np.array([1,2,3]))
'[1 2 3]'
  • informal, pentru utilizatorul final
  • reprezentare de tip string

__repr__()

  • repr(obj), afișare în consolă
repr(np.array([1,2,3]))
'array([1,2,3])'
np.array([1,2,3])
array([1, 2, 3])
  • formal, pentru dezvoltatori
  • reprezentare reproductibilă
  • alternativă pentru print()
Introducere în Programarea Orientată pe Obiecte în Python

Implementare: repr

class Customer:
    def __init__(self, name, balance):
        self.name = name
        self.balance = balance 

    def __repr__(self):

# Notice the '...' around name return f"Customer('{self.name}', {self.balance})"
cust = Customer("Maryam Azar", 3000) # Will implicitly call __repr__() cust
Customer('Maryam Azar', 3000)
Introducere în Programarea Orientată pe Obiecte în Python

Implementare: str

class Customer:
    def __init__(self, name, balance):
        self.name = name
        self.balance = balance
    def __str__(self):
        cust_str = f"""
        Customer:
            name: {self.name}
            balance: {self.balance}
            """
        return cust_str
cust = Customer("Maryam Azar", 3000)

# Will implicitly call __str__()
print(cust)
Customer:
  name: Maryam Azar
  balance: 3000
Introducere în Programarea Orientată pe Obiecte în Python

Să exersăm!

Introducere în Programarea Orientată pe Obiecte în Python

Preparing Video For Download...