Python基础教程(三)类和对象、异常处理和模块

8.类与对象

8.1 面向对象

面向对象的三大基本特征: 封装、继承、多态。

在面向对象编程中,封装(Encapsulation)是一种将数据和操作(方法)组合在一起的机制。通过封装,我们可以隐藏数据的具体实现细节,只暴露出一些对外的接口,外部程序只能通过这些接口来访问和操作数据。

封装的主要目的是保护数据的安全性和完整性,防止外部程序直接修改数据,导致不可预料的错误。同时,封装也提供了简化操作的便利性,对外部程序来说,只需要关注公开的接口,而不需要关心具体的实现方式。

在封装中,通常会将数据声明为私有的(private),并提供一些公开的方法(public methods)来获取和修改数据。这些公开的方法可以对数据进行一些校验和处理,保证数据的有效性和一致性。

封装也有助于实现代码的可维护性和可扩展性,通过封装,我们可以将修改数据和操作的逻辑集中在一个地方,方便后续的修改和扩展。

总结来说,封装是一种将数据和操作组合在一起的机制,通过封装可以隐藏数据的实现细节,保护数据的安全性,提供简化操作的接口,并提高代码的可维护性和可扩展性。

继承是面向对象编程中的一个重要概念,它允许一个类(称为子类或派生类)从另一个类(称为父类、基类或超类)继承属性和方法。

子类可以继承父类的属性和方法,并且还可以添加自己的特定属性和方法。这样可以实现代码的重用和扩展。

多态是面向对象编程中的一个概念,指的是同一个方法在不同对象上的不同表现形式。简单说,就是通过使用父类的引用指向子类的对象,实现对不同子类对象调用同一个方法时产生不同的结果。

8.2 类与对象

8.2.1 类与对象的关系

类与对象的关系是一种包含与被包含的关系。

类是对一类具有相同属性和行为的对象的抽象描述,它定义了对象的属性和方法。它可以看作是一个模板或蓝图,描述了对象应该具有的特征和行为。

对象是类的实例化,是具体存在的实体,它具有类定义的属性和方法。

类和对象的关系可以用类比现实生活中的一对模具和铸件的关系。类就像是一个模具,定义了对象的特征和行为;对象就像是具体的铸件,是根据模具创建出来的实体。

类与对象的关系还可以用包含与被包含的关系来理解。一个类可以包含多个对象,这些对象都是类的实例化。而一个对象则包含类定义的属性和方法。

总结来说,类是对一类对象的抽象描述,对象是类的实例化,它们之间是一种包含与被包含的关系。

8.2.2 类的定义与访问

class 类名:
        属性名=属性值
        def 方法名(self):
                方法体

>>> class Car:
    wheels=4
    def drive(self):
        print('开车方法')
    def stop(self):
        print('停车方法')
        
>>> 

在Python中,self是一个特殊的参数,它代表当前对象实例本身。通过使用self,我们可以在类的方法中引用和操作对象的属性和方法。

在类的方法中,通常第一个参数会被命名为self,用于接收当前对象的引用。当我们调用对象的方法时,Python会自动将对象本身作为第一个参数传递给self。

使用self可以让类的方法操作对象的属性和方法。通过self,我们可以访问和修改对象的属性,调用对象的其他方法,以及在方法中创建临时变量。

实际上,self并不是Python中固有的关键字,我们可以用其他名称来代替self,但约定俗成的做法是使用self。在方法的定义和调用中,都应遵循这个约定,以保持代码的可读性和一致性。

例如,下面是一个简单的示例,演示了如何在类的方法中使用self:

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

    def say_hello(self):
        print(f"Hello, my name is {self.name} and I am {self.age} years old.")

person1 = Person("Alice", 25)
person1.say_hello()  # 输出: Hello, my name is Alice and I am 25 years old.

在上面的例子中,self被用于访问对象的name和age属性。当调用person1对象的say_hello方法时,self会自动接收person1对象的引用,并以此访问和操作对象的属性。

8.2.3 对象的创建与使用

①对象的创建
对象名=类名()
my_car=Car

②访问对象成员
对象名.属性
对象名.方法()

class Car:
    wheels=4
    def drive(self):
        print('开车方法')
    def stop(self):
        print('停车方法')

my_car=Car()   #创建对象
print(my_car.wheels)#访问对象的成员属性
my_car.drive()     #访问对象的成员方法

8.2.4 访问限制

①定义私有成员
__属性名
__方法名

②私有成员的访问

>>> class PersonInfo:
    __weight=55
    def __info(self):
        print(f'我的体重是:{__weight}')
        
>>> person=PersonInfo()
>>> person.__weight        #类外不访问私有成员,会报错
Traceback (most recent call last):
  File "<pyshell>", line 1, in <module>
AttributeError: 'PersonInfo' object has no attribute '__weight'
>>> person.__info()
Traceback (most recent call last):
  File "<pyshell>", line 1, in <module>
AttributeError: 'PersonInfo' object has no attribute '__info'
>>> 

(1) 访问私有属性

可以通过访问公有方法间接访问私有属性

>>> class PersonInfo:
    __weight=55
    def get_weight(self):
        print(f'我的体重是:{self.__weight}kg')
        
>>> person=PersonInfo()
>>> person.get_weight()
我的体重是:55kg
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值