学习python记录:基础---13面对对象

面向对象编程介绍

面向对象编程:Object Oriented Programming,简称OOP,是一种程序设计思想。 需要注意的是,与之对应的是面向过程编程思想。实际上,能够使用面向对象编程思想实 现的程序,也都能通过面向过程完成。只是看哪种思想更适合当前开发需求。

面向过程与面向对象区别

面向过程:根据业务逻辑从上到下写代码   面向对象:将数据与函数绑定到一起,进行封装。减少重复代码的重写过程 

类和对象

一个类是一个数据类型,包含了属性和方法。类是无法直接使用的,需要通过创建对象来使用。一个对象是类的一个实例,具有类定义的属性和方法。在Python中,可以使用class关键字来定义一个类。

以下是一个简单的类:

class Dog:
    # 初始化方法
    def __init__(self, name, age):
        self.name = name
        self.age = age

    # 方法
    def bark(self):
        print(f'{self.name} is barking!')

# 创建对象
my_dog = Dog('Tommy', 2)

# 调用方法
my_dog.bark()

这个类叫做Dog,它有两个属性:nameage;同时还有一个方法叫做bark(),用于打印一段狗吠声。通过__init__()方法初始化对象时,需要传递nameage参数。在上面的示例中,我们创建了一个名为my_dog的对象,并调用了它的bark()方法。

常用方法

__init__()

__init__()方法在创建一个对象时会调用,用于初始化实例对象的属性。这个方法接受很多参数,其中第一个参数永远是self,表示实例对象本身。

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

person = Person('John', 22)
print(person.name, person.age) # John 22

继承

继承是面向对象编程中的一种重要概念。可以使用继承来创建一个类,新类将继承所父类的所有属性和方法。子类可以修改父类的属性和方法,并且可以添加新的属性和方法。

以下是一个简单的继承示例:

# 父类
class Animal:
    def __init__(self, name):
        self.name = name

    def eat(self):
        print(f'{self.name} is eating!')

# 子类
class Dog(Animal):
    def __init__(self, name, age):
        super().__init__(name)
        self.age = age

    def bark(self):
        print(f'{self.name} is barking!')

# 创建对象
my_dog = Dog('Tommy', 2)

# 调用方法
my_dog.eat()
my_dog.bark()

这个示例中定义了两个类:AnimalDogDog类继承了Animal类的属性和方法,包括__init__()eat()。子类可以使用super()函数来调用父类的__init__()方法。在这个示例中,我们创建了一个名为my_dogDog对象,并调用了它的eat()bark()方法。由于Dog类继承了Animal类的eat()方法,因此这个方法可以被Dog对象调用。

封装

在Python中,可以使用封装来隐藏类的属性和方法,以保证类的安全性。通过封装,我们可以防止外部程序意外访问类的属性和方法。在Python中,可以通过定义私有变量和方法来实现封装。

以下是一个简单的封装示例:

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

    def deposit(self, amount):
        self.__balance += amount

    def withdraw(self, amount):
        if amount <= self.__balance:
            self.__balance -= amount
        else:
            print('Insufficient balance')

    def get_balance(self):
        return self.__balance

# 创建对象
my_account = BankAccount(100)

# 调用方法
my_account.deposit(50)
my_account.withdraw(30)

# 访问属性
print(my_account.get_balance())

这个示例中,BankAccount类有一个私有属性__balance,以及三个方法:deposit()withdraw()get_balance()。在上面的代码中,我们创建了一个名为my_accountBankAccount对象,并对它进行了一些操作,最后输出了它的余额。由于__balance是一个私有变量,因此外部程序无法直接

多态

多态是面向对象的三大特性之一,通过在父类中定义方法,并在子类中重写这个方法,实现不同的行为。多态增加了代码的灵活性和可维护性。

class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        print("I'm an animal")

class Dog(Animal):
    def __init__(self, name):
        super().__init__(name)

    def speak(self):
        print("I'm a dog")

class Cat(Animal):
    def __init__(self, name):
        super().__init__(name)

    def speak(self):
        print("I'm a cat")

def animal_speak(animal):
    animal.speak()

animals = [Dog('Tommy'), Cat('Lucy')]
for animal in animals:
    animal_speak(animal)

__str__()和 __repr__()

__str__()__repr__()方法都返回一个字符串,用于表示对象。__str__()用于输出简洁的字符串表示,而__repr__()方法输出详细的字符串表示,可以用于调试和开发。

class MyClass:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __str__(self):
        return f"{self.name} is {self.age} years old"

    def __repr__(self):
        return f"MyClass('{self.name}', {self.age})"

mc = MyClass('John', 22)
print(str(mc)) # John is 22 years old
print(repr(mc)) # MyClass('John', 22)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值