【Python】面向对象的程序设计

一、面向对象的介绍

1.对象

对象是一种抽象概念,表示客观世界存在的实物,现实世界中能够看到的、触碰到的都可以成为对象,如:人、大象、小猫等。

对象通常分为两个部分,即静态部分和动态部分。静态部分为“属性”,任何对象都具备自身属性;动态部分为“行为”,即对象执行的动作。

2.类

具有相同属性和行为的一类实体被称为类,类是封装对象的属性和行为的载体。

【在Python中,类是一类抽象概念,可以定义每个对象共有的属性和方法,对象是类的实例】

3.面向对象的程序设计的特点

对象含义主要指万物皆对象;类是具有相同属性和功能的对象的抽象集合;对象就是类的实例。面向对象的程序设计共有三个基本特征:封装、继承和多态。

①封装

在面向程序的设计中,封装是指把数据和实现操作的代码集中起来放在对象内部,对不可信的信息进行隐藏,使得代码模块化,保护数据不被其他函数的意外修改。并且从对象外面不能够直接访问对象的属性,只能通过和该属性对应的方法访问。

②继承

继承,一种对类进行分层划分的概念。继承的基本思想是在一个类的基础上制定出一个新的类,这个新的类不仅可以继承原来的类的属性和方法,还可以增加新的属性和方法,扩展已存在的代码块,实现代码重用。【一般情况下,一个子类只能有一个父类,子类覆盖在父类必须保证子类权限大于父类权限】

定义子类的语法如下:

class SubClass(BaseClass1,BaseClass2):
    语法块

③多态

将父类对象应用于子类的特征就是多态。即“一个接口,多种方法”,同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。多态可以实现接口重用。

示例:

从上述例子可以看出,当父类和子类存在相同的方法时,子类的方法会覆盖父类的方法,这样代码在运行时总会调用子类的方法,这就是多态。

二、类的定义和使用

1.类的定义

在Python中,类的定义是用class来实现的,其语法格式如下:

class ClassName:
'''类的帮助信息'''
    Statement

参数说明如下:

ClassName:用于指定类名,一般用大写字母开头,如果类名中包括两个单词,第二个单词的首字母也要大写,这种命名方法也成为了“驼峰命名法”。

'''类的帮助信息''':用于指定类的文档字符串,定义该字符串后,在创建类的对象时,输入类名和左侧的括号“(”后,将显示该信息。

Statement:类主要由类变量(或类成员)、方法和属性等定义语句组成。如果在定义时,没想好类的具体功能,也可以在类体中直接使用pass语句代替。

2.创建 _ _init_ _() 方法

在创建类之后,类通常会自动创建一个 _ _init _ _() 方法,该方法是一个特殊的方法,类似Java中的构造方法。每当创建一个新的类的实例时,Python都会自动执行它。_ _init_ _() 方法必须包含一个self参数,并且必须时第一个参数。self参数是一个指向实例本身的引用,用于访问类的方法和属性。在方法调用时会自动传递实际参数self。因此,当_ _init_ _() 方法只有一个参数时,在创建类的实例时,就不需要指定实际参数了。

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

三、属性

1.属性存在的意义

(1)访问属性时可以制造出和访问字段完全相同的假象,属性由方法衍生而来,如果Python中没有属性,方法完全可以替代其功能。

(2)定义属性可以动态获取某个属性值,属性值由属性对应的方法实现,应用更加灵活。

(3)可以制订直接的属性规则,用于防止他人随意修改属性值。

2.操作属性的三种方法

(1)使用@property装饰器操作类属性

class Demo:
    @property
    def methodname(self):
        block

参数说明如下:

methodname:用于指定方法名,一般使用小写字母开头。该名称最后将作为创建的属性名。

self:必要参数,表示类的示例。

block:方法体,表示实现的具体功能。在方法体中,通常以return语句结束,于是返回计算结果。

定义时,在普通方法的基础上添加@property装饰器,属性仅有一个self参数,调用时无需括号,该方法的优点包括:

①@property装饰器可以实现其他语言所拥有的getter、setter和deleter的功能。

②通过@property装饰器可以对属性的取值和赋值加以控制,提高代码的稳定性。

(2)使用类或实例直接操作属性

这种方法的缺点是对类的属性没有操作控制规则,容易被人修改。

(3)使用Python内置函数操作属性

①getattr(obj,name[,default]):访问对象的属性,如果不存在返回对象属性的值,则会抛出AttributeError异常。

②hasattr(obj,name):检查是否存在某个属性,存在返回True,否则返回False。

③setattr(obj,name,value):设置一个属性。如果属性不存在,会创建一个新的属性,该函数无返回值。若存在则更新这个值。

④delattr(obj,name):删除属性,如果属性不存在则抛出AttributeError异常,该函数也无返回值。

四、继承

1.继承的基本语法

继承允许我们定义一个类时,让该类继承另一个类的所有方法和属性。

父类是被继承的类,也称为基类;子类是继承父类的类,也称为派生类。

继承概念的实现方式主要有两类:实现继承、接口继承。

(1)实现继承是指使用基类的属性和方法而无须额外编码的能力

(2)接口继承是指仅使用属性和方法的名称,但是子类必须提供实现的能力(子类重构父类方法)。

2.方法重写

当我们调用一个方法的对象时,会优先去当前对象中寻找是否具有该方法,如果有则直接调用,如果没有则去对象的父类中寻找,如果父类中有则直接调用父类中的方法,如果没有则还是去父类的父类中寻找,以此类推,直到找到object,如果始祖父类中也没有,就会报错。

示例:

  • 32
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python向对象程序设计是一种编程范式,它将程序看作是一系列对象的集合,每个对象都有自己的属性和方法。在Python中,可以使用抽象基类(Abstract Base Class,ABC)来实现抽象类,抽象类是不能被实例化的类,只能被其它类继承和实现。 在Python中,定义一个类可以使用class关键字,可以在类中定义构造方法(__init__)和其他方法。构造方法用于初始化对象的属性,其他方法用于描述对象的行为。 例如,定义一个Car(汽车)类,可以使用构造方法来初始化汽车的名称,然后定义一个getName方法来获取汽车的名称。可以通过创建Car类的对象来使用这些方法。 另外,在Python中可以定义父类和子类,子类可以继承父类的属性和方法,并且可以重写父类的方法。可以使用super关键字来调用父类的方法。 例如,定义一个People(人)类,其中包括构造方法和公有方法speak,然后定义一个Student(学生)类,继承自People类,并且重写了speak方法。可以创建Student类的对象,并调用其自己定义的speak方法和父类的speak方法。 总之,Python面向对象程序设计提供了丰富的语法和特性,可以利用类、对象、继承和重写等概念来构建复杂的程序。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [【python面向对象程序设计(基础篇)](https://blog.csdn.net/m0_67388084/article/details/128057443)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值