Python基础之day06-面向对象基础1

Python基础之day06-面向对象基础1


代码仓库地址: https://gitee.com/andox_yj/python

一、面向对象介绍

  1. 面向对象介绍:面向对象是一种软件开发的方法,使用类和对象来描述事物。
  • 面向过程:根据业务逻辑从上到下写代码
  • 面向对象:将数据与函数绑定到一起,进行封装,这样能够更快速的开发程序,减少了重复代码的重写过程
  • 面向对象编程:是一种解决软件复用的设计和编程方法。 这种方法把软件系统中相近相似的操作逻辑和操作 应用数据、状态,以类的型式描述出来,以对象实例的形式在软件系统中复用,以达到提高软件开发效率的作用。
  1. 面向对象三大特性:
  • 封装:把数据和行为(或功能)相结合,形成一个整体,隐藏实现细节,对外提供使用。
  • 继承:一个类可以继承另外一个类的属性和方法,有单继承和多继承单继承指一个类只能有一个父类,多继承指一个类可以有多个父类
  • 多态:多态依赖于继承,一个类的对象的引用,可以指向这个类的对象,也可以指向它的子类对象,在运行后才能确定具体是哪个对象,通过这种形式让程序有多种形态,称为多态
  1. 类介绍:
  • 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
  • 方法:类中定义的函数。
  • 类属性:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
  • 对象属性:仅属于当前对象的变量
  • 数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。
  • 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
  • 局部变量:定义在方法中的变量,只作用于当前实例的类。
  • 实例变量:在类的声明中,属性是用变量来表示的,这种变量就称为实例变量,实例变量就是一个用 self 修饰的变量。
  • 继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。
  • 实例化:创建一个类的实例,类的具体对象。
  • 对象(实例、成员):通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。
  1. 类与对象
  • 类:用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
  • 对象:对象向对象编程的核心,在使用对象的过程中,为了将具有共同特征和行为的一组对象抽象定义,提出了另外一个新的概念——类

二、定义类及创建类对象

  1. 代码示例
    """
    语法结构:
        # 定义一个类
        class 类名:
            类属性名=属性值
            def 方法名(self):
                代码...
                
        # 创建一个类对象
        object = 类名()
    """
    
    
    # 创建一个猫对象
    class Cat:
        # 类属性
        colour = 'black'
    
        # 方法
        def eat(self):
            print('吃鱼')
    
        def drink(self):
            print('喝酸奶')
    
    
    # 创建猫类的对象
    tom1 = Cat()  # 创建第一只猫
    # 获取类属性
    print(tom1.colour)  # black
    # 设置对象属性,并输出
    tom1.age = 18
    print(tom1.age)  # 18
    # 执对象方法
    tom1.eat()  # 第一只猫执行吃鱼的方法
    tom1.drink()  # 第一只猫执喝酸奶的方法
    
    # 创建第二只猫
    tom2 = Cat()
    # 获取类属性
    print(tom2.colour)  # black
    # 设置对象属性,并输出
    tom2.age = 20
    print(tom2.age)  # 18
    # 执对象方法
    tom2.eat()  # 第二只猫执行吃鱼的方法
    tom2.drink()  # 第二只猫执喝酸奶的方法
    

三、在类中通过self获取对象属性

  1. self 介绍:类中定义的所有方法,第一个参数都必须是 self,self表示当前类对象本身,既哪个对象调用的该方法,self就代表哪个对象。
  2. 代码示例
    # 创建一个类
    class Person:
        def study(self):
            print("我在学习{}".format(self.course))
    
    
    # 创建第一个类对象
    p1 = Person()
    p1.course = "编程"
    p1.study()  # 我在学习编程
    
    # 创建第二个类对象
    p2 = Person()
    p2.course = "Python"
    p2.study()  # 我在学习Python
    

四、__init__方法

  1. __init__方法介绍:
  • __init__方法,在创建一个对象时默认被调用,不需要手动调用
  • 在__init__(self)中的self参数,不需要开发者传递,python解释器会自动把当前的对象引用传递过去。
  • 在__init__(self)方法里设置的对象属性,与 对象.属性名 = 属性值 的效果是一样的。
  1. 代码示例
    # ################# 1、无参数的__init__方法,给对象绑定默认属性 ####################
    class Cat1:
        # 属性
        def __init__(self):
            self.name = 'tom'
            self.age = 18
    
        # 方法
        def introduce(self):
            print('大家好,我是%s,我今年%s岁' % (self.name, self.age))
    
    
    # 创建类对象时,不需要传递参数
    cat1 = Cat1()
    # 输出对象属性
    print(cat1.name)  # tom
    print(cat1.age)  # 18
    # 使用对象方法
    cat1.introduce()  # 大家好,我是tom,我今年18岁
    
    
    # ################# 2、有参数的__init__方法 ####################
    class Cat2:
        # 属性
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        # 方法
        def introduce(self):
            print('大家好,我是%s,我今年%s岁' % (self.name, self.age))
    
    
    # 创建类对象时,需要传递参数
    cat2 = Cat2('黑猫警长', 22)
    # 输出对象属性
    print(cat2.name)  # 黑猫警长
    print(cat2.age)  # 22
    # 使用对象方法
    cat2.introduce()  # 大家好,我是黑猫警长,我今年22岁
    
    
    # ################# 3、有参数的__init__方法,给参数设置默认值 ####################
    class Cat3:
        # 属性
        def __init__(self, name="蓝猫", age=16, gender="男"):
            self.name = name
            self.age = age
            self.gender = gender
    
        # 方法
        def introduce(self):
            print('大家好,我是%s,我今年%s岁,我是%s生' % (self.name, self.age, self.gender))
    
    
    # 创建类对象,传递参数就用传递的,不传递就用默认的
    cat3 = Cat3("灰猫", age=30)
    # 输出对象属性
    print(cat3.name)  # 灰猫
    print(cat3.age)  # 30
    # 使用对象方法
    cat3.introduce()  # 大家好,我是灰猫,我今年30岁,我是男生
    

五、私有属性和私有方法

  1. 私有权限介绍:
  • 在属性名或方法名 前面 加上两个下划线 __,就是私有属性或私有方法了,私有属性。
  • 类的私有属性 和 私有方法,都不能通过对象直接访问,但是可以在本类内部访问;
  • 私有属性 和 私有方法 往往用来处理类的内部事情,不通过对象处理,起到安全作用。
  1. 注意:私有化既在创建属性或者方法的时候,将名字修改为:_类名 + __属性名/方法名,如需访问,使用:对象._类名 + __属性名/__方法名
  2. 代码示例
    """
    用法:
        私有属性:
            私有类属性:__变量名 = 值
            私有对象属性:self.__变量名 = 值
        私有方法:
            def __方法名(self):
    """
    class Person:
        __name = "Andy_class"
    
        def __init__(self):
            # 私有属性
            self.__name = 'Andy'
    
        # 私有方法
        def __study(self):
            print("%s学习编程" % self.__name)
    
        # 对外访问私有属性的方法 加验证
        def verify_get_name(self, password):
            if password == 123:
                # 私有属性,可以在类的内部使用
                print(self.__name)
            else:
                print('密码验证失败')
    
        # 对外访问私有属性的方法
        def get_name(self):
            print(self.__name)
    
        # 对外修改私有属性的方法
        def set_name(self, new_name):
            self.__name = new_name
    
        # 对外调用私有方法的方法 加验证
        def verify_get_study(self, password):
            if password == 123:
                # 私有方法,可以在类的内部使用
                self.__study()
            else:
                print('密码验证失败')
    
        # 对外调用私有方法的方法
        def get_study(self):
            # 私有方法,可以在类的内部使用
            self.__study()
    
    
    person = Person()
    
    # 1.调用私有属性报错
    # print(person.__name)  # AttributeError: 'Person' object has no attribute '__name'
    # 2.调用私有方法报错
    # person.__study()  # AttributeError: 'Person' object has no attribute '__study'
    
    # 3.通过调用方法验证密码后查看私有属性,安全验证
    person.verify_get_name(123)  # Andy
    # 4.使用对外接口方法来查看私有属性
    person.get_name()  # Andy
    # 5.使用对外接口来设置私有属性
    person.set_name("Andy_Change")
    person.get_name()  # Andy_Change
    
    # 6.通过调用方法验证密码后调用私有方法,安全验证
    person.verify_get_study(123)  # Andy_Change学习编程
    # 7.使用对外接口方法来查看私有属性
    person.get_study()  # Andy_Change学习编程
    
    # 8.强制访问私有属性与私有方法:对象._类名 + __属性名/__方法名
    print(person._Person__name)  # Andy_Change
    person._Person__study()  # Andy_Change学习编程
    
    # 9.当对象属性与类属性重名时,会优先调用对象属性,如果想使用类属性,可以类名.类属性名
    print(person._Person__name)  # Andy_Change
    print(Person._Person__name)  # Andy_class
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值