面向对象程序设计

本文详细介绍了面向对象编程的核心概念,包括对象、类、封装、继承和多态。讲解了如何定义类、创建实例、访问成员,以及如何通过属性和方法实现数据的安全访问。同时,探讨了继承的语法、方法重写和调用基类的__init__()方法。此外,还提到了属性的创建,包括计算属性和安全保护机制。
摘要由CSDN通过智能技术生成

面向对象程序设计
    面向对象概述
        对象----抽象概念,英文称作"Object"
            静态部分:被称为“属性”,任何对象都具备自身属性
            动态部分:对象的行为,即对象执行的动作
        类----封装对象的属性和行为的载体(具有相同属性和行为的一类实体被称为类)
            雁群--大雁类
                属性:翅膀和爪等
                行为:觅食、飞行和睡觉
                    一只大雁则被视为大雁类的一个对象 -----对象是类的实例
                
        面向对象程序设计的特点
            封装----面向对象编程的核心思想
                将对象的属性和行为封装起来
                而将对象的属性和行为封装起来的载体就是类
                类通常对客户隐藏隐藏其实现细节,这就是封装的思想
                    步骤一:(类将内部数据隐藏)类
                    步骤二:为用户提供对象的属性和行为的接口
                    步骤三:用户在不清楚类内部是如何构成的前提下,可以通过这些接口操作类,但是不能操作类中的内部数据
                
            继承----实现重复利用的重要手段
                类似于四边形的类称为父类或超类
                类似于平行四边形的类称为子类    
                    子类的实例都是父类的实例,不能说父类的实例是子类的实例
            
            多态
                将父类对象应用于子类的特征就是多态
                    父类 : 螺丝类   属性两个:粗细和螺纹密度
                    子类:长螺丝类  短螺丝类   长 短
                    (一个螺丝类衍生成不同的子类,子类继承父类特征的同时,也具备了自己的特征,并且能够实现不同的效果)
                    多态化的结构
                    
    
    类的定义与使用
        定义类
            class ClassName:        -----class语句本身并不创建该类的任何实例
                "类的帮助信息"      # 类文档字符串
                statement           # 类体
                    ClassName:大写字母开头,多个单词,其他单词的首字母也是大写
                    类的帮助信息:用于指定类的文档字符串,定义该字符串后,创建类的<对象>时,输入类名和左侧的括号,将显示该信息
                    statement:类体,主要由类变量(或类成员)、方法和属性等定义语句构成。
                    
        创建类的实例         -----即实例化该类的对象
            ClassName(parameterlist)
                ClassName 是必选参数,用于指定具体的类
                parameterlist 是可选参数
                    创建一个类时,没有创建__init__()方法,或者__init__()方法只有一个self参数时,parameterlist可以省略。
                
        创建__init__()方法
            创建类后,通常会创建一个__init__()方法。
            该方法是一个特殊的方法,类似java语言中的构造方法。
            每当创建一个类的新实例时,python都会自动执行它。
            _init__()方法必须包含一个self参数,并且必须是第一个参数
            self参数是一个指向实例本身的引用,用于访问类中的属性和方法,在方法调用时会自动传递实际参数self
        
        创建类的成员并访问
        类的成员: (在类中创建了类的成员后,可以通过类的实例进行访问)
            实例方法
            数据成员组成。
            
            1、创建实例方法并访问
            所谓实例方法,是指在类中定义的函数。----实现类中的一个行为,是类的一部分
            该函数是一种在类的实例上操作的函数
                实例方法创建
                同__init__()方法一样,实例方法的第一次参数必须是self,并且包含一个self参数
                def funtionName(self,parameterlist):
                    block
                    
                    # funtionName:用于指定方法名,一般使用小写字母开头
                    # self:必要参数,表示类的实例,其名词可以使self以外的单词,使用self只是一个习惯而已
                    # parameterlist:用于指定除self参数以外的参数,各参数间使用逗号“,”进行分割
                    # block:方法体,实现的具体功能
                
                实例方法访问
                实例方法创建完成后,可以通过类的实例名称和点(.)操作符进行访问
                instanceName.funtionName(parameterlist)
                    # instanceName:为类的实例名称
                    # funtionName:要调用的方法名称
                    # parameterlist:表示为方法指定对应的实际参数,其值的个数与创建实例中的parameterlist的个数相同
                    
            2、创建数据成员并访问
            数据成员是指在类中定义的变量,即属性、根据定义位置,又可以分为类属性和实例属性
                类属性:----可以通过类名称或者实例名称访问
                    定义在类中并且在函数体外的属性
                    类属性可以在类的所有实例之间共享值,也就是在所有实例化的对象中公用
                        通过类名称访问类属性
                            Geese.beak=""       # 添加类属性
                        还可以动态地为类和对象添加属性
                            list1[1].break
                        也可以修改类属性。修改结构将作用域该类的所有实例
                        
                实例属性:----
                    定义在类的方法中的属性,只作用域当前实例中
                    实例属性只能通过实例名访问。如果通过类名访问实例属性,将抛出异常。
                        对于实例属性可以通过实例名称修改
        
                class Geese:     # 创建上面的类geese
                geese = Geese()  # 实例化一个雁类的对象 
        
        
        访问限制----为了保护类内部的某些数据或方法不被外部访问
            1、_foo:以单下划线开头的表示protected(保护)
                只允许类本身和子类进行访问
                但不能使用“from module import *"语句导入        
                    实例方法中访问保护属性
                    保护属性可以通过实例名访问
            2、__foo:双下划线表示private(私有)类型的成员
                只允许定义该方法的类本身进行访问
                而且也不能通过类的实例进行访问
                但是可以通过  类的实例名.类名__方式访问
                    私有属性可以在类的实例方法中访问
                    也可以通过实例名.类名__xxx方式进行访问
                    不能通过实例名+属性名访问
            3、__foo__:首尾双下划线表示定义特殊方法,一般是系统定义名字,如__init__
            
    
    属性
        创建用于计算的属性
            @property(装饰器)将一个方法转换为属性,从而实现用于计算的属性
            将方法转换为属性后,可以直接通过方法名来访问方法,而不需要添加一个小括号()
            @property
            def methonname(self):
                block
                
                # methonname 用于指定方法名,一般使用小写字母开头,该名称最后将作为创建的属性名
                # self:必要参数,表示类的实例
                # block: 方法体,表示实现的具体功能,在方法体中,通常以return语句结束,用于返回计算结果。
                    通过@property转换为的属性不能重新赋值
                
        为属性添加安全保护机制
            不能在类体外修改,可以将其设置为私有的
            但设置为私有后,在类体外也不能获取它的值
            如果想要创建一个可以读取但不能修改的属性,可以使用@property
            
            通过属性不仅可以将属性设置为只读属性,而且可以为属性设置拦截器,即允许对属性进行修改,但修改时需要遵守一定的约束
    继承
        
        继承的基本语法
        被继承的类称为父类或基类
        新的·类称为子类或派生类
           class ClassName(baseclasslist):
                '''类的帮助信息'''              # 类文档字符串
                Statement                       # 类体
           
                # ClassName:用于指定类名
                # baseclasslist:用于指定要继承的基类,可以有多个,类名之间用“逗号”分隔,如果不指定,将使用所有python对象的根类object
                # 类的帮助信息:用于指定类的文档字符串,定义该字符串后,创建类的<对象>时,输入类名和左侧的括号,将显示该信息
                # statement:类体,主要由类变量(或类成员)、方法和属性等定义语句构成。  
        
        方法重写
        基类的成员都会被派生类继承,当基类中的某个成员不完全适用于派生类中,就需要在派生类中重写父类的这个方法。
        
        
        派生类中调用基类的__init__()方法
        派生类中定义__init__()方法时,不会自动调用基类的__init__()方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值