2021-10-08大数据学习日志——Python基础——面向对象(下)(继承、属性、方法)(附练习题)

本文介绍了面向对象编程的基础概念,包括私有权限、继承和多态。私有属性和方法只能在类内部访问,继承使得子类继承父类的属性和方法,实现代码复用。多态允许不同类的对象调用同名方法,展现不同行为。此外,还探讨了类属性和实例属性、类方法与静态方法的区别与使用。
摘要由CSDN通过智能技术生成

学习目标:

 

  • 知道私有权限和公有权限的区别
  • 知道继承的作用
  • 掌握继承的使用,例如:语法格式,单继承、多层继承、多继承
  • 知道使用super()能够调用父类的同名方法
  • 知道类属性和实例属性的区别
  • 知道类方法、实例方法、静态方法的区别

01_私有权限

学习目标:

  • 知道私有权限和公有权限的区别

1.1 面向对象的特性

  • 面向对象的的三大特性:封装、继承、多态

  • 面向对象的封装特性:

    • 将属性和方法放到一起封装成一个整体,然后通过实例化对象来处理
    • 对类的属性和方法增加访问权限控制

1.2 私有属性

  • 如果在属性名前面加了2个下划线'__',则表明该属性是私有属性,否则为公有属性

  • 私有属性只能在类的内部访问

"""
私有属性:
    1. __(2个下划线)开头的属性,就是私有属性
    2. 只能在本类的内部访问,在类的外面无法直接访问
"""
class Dog(object):
    # 添加属性
    def __init__(self):
        self.__baby_count = 0   # 私有属性,以__(2个下划线)开头的属性
        self.age = 1    # 公有属性

    def print_info(self):
        print(self.__baby_count)


# 类的外部
# 创建对象
dog1 = Dog()
# print(dog1.__baby_count) # err, 私有属性,在类的外面无法直接访问
print(dog1.age)

dog1.print_info()

1.3 私有方法

  • 私有方法和私有属性类似,在方法名前面加了2个下划线'__',则表明该方法是私有方法

  • 私有方法只能在类内部使用

"""
私有方法:
    1. __(2个下划线)开头的方法,就是私有方法
    2. 只能在本类的内部访问,在类的外面无法直接访问
    3. 在类的内部调用实例方法的语法格式:self.方法名()
"""


class Dog(object):
    def __init__(self):
        self.__baby_count = 0 # 私有属性,以__(2个下划线)开头的属性
        self.age = 1

    def print_info(self):
        print(self.__baby_count)
        self.__leave()

    # 定义一个私有方法
    def __leave(self):
        print('休产假了')


dog1 = Dog()
dog1.print_info()
# AttributeError: 'Dog' object has no attribute '__leave'
# dog1.__leave() # err, 外部不能访问私有方法

【附】类定义时私有属性/私有方法的本质[了解]

(1) Python解释器将私有属性名/私有方法名进行的转换,转换的格式为:`_类名__属性名`或`_类名__方法名`

(2) 在类的外部直接通过原私有属性/私有方法是访问不到的,但是通过转换后的名称可以进行访问[不推荐使用]

02_继承介绍

学习目标:

  • 知道继承的作用
  • 知道继承的语法格式

2.1 继承的概念

2.1.1 生活中的继承

在现实生活中,继承一般指的是子女继承父辈的财产

2.1.2 程序中的继承

在程序中,继承描述的是指的是类与类之间的关系,如下如所示:

  • 站在父类的角度来看,父类派生出子类
  • 站在子类的角度来看,子类继承于父类
  • 父类也叫基类子类也叫派生类

2.2 继承的作用

  • 继承:子类直接具备父类的能力(属性和方法)
  • 作用:解决代码重用问题,提高开发效率

2.3 继承的语法格式

继承的语法格式:

class 子类名(父类名):
    pass

示例代码:

# 定义一个父类
class Father(object):
    # 添加一个属性, money
    def __init__(self):
        self.money = 9999999

    def print_info(self):
        print(self.money)


# 定义一个子类,继承与Father
class Son(Father):
    pass


# 子类创建对象
s = Son()
print(s.money)  # 子类私用继承过来的属性
s.print_info()  # 子类使用继承过来的方法

注意:

  • 子类对象调用方法有一个就近原则
  • 如果本类能找到方法,直接调用本类的方法
  • 如果本类找不到,则调用父类继承过来的方法

03_单继承和多层继承

学习目标:

  • 知道单继承和多层继承的特点

3.1 单继承

  • 单继承:子类只继承一个父类
# 定义一个父类, Animal
class Animal(object):
    def eat(self):
        print('吃东西')


# 定义一个子类,只有一个父类
class Dog(Animal):
    pass


# 创建一个子类对象
dog1 = Dog()
dog1.eat()

3.2 多层继承

  • 多层继承:继承关系为多层传递,如生活中的爷爷、父亲、儿子
# 定义一个爷爷类, Animal
class Animal(object):
    def eat(self):
        print('吃东西')


# 定义一个父亲类
class Dog(Animal):
    def drink(self):
        print('喝东西')


# 定义一个儿子类
class SuperDog(Dog):
    pass


# 创建对象
sd = SuperDog()
sd.eat()
sd.drink()

04_重写父类方法

学习目标:

  • 知道使用super()能够调用父类的同名方法

4.1 子类重写父类同名方法

  • 父类的方法不能满足子类的需要,可以对父类的方法重写,重写父类方法的目的是为了给他扩展功能,可以对父类(包括爷爷)以上的进行重写
  • 在子类中定义了一个和父类同名的方法(参数也一样),即为对父类的方法重写
  • 子类调用同名方法,默认只会调用子类的

示例代码1:(狗类)

# 定义一个父类, Animal
class Animal(object):
    # 添加一个type属性
    def __init__(self):
        print('Animal类中的__init__')
        self.type = '动物'

    # 设计一个方法,打印属性
    def print_type(self):
        print('Animal类中的print_type = ', self.type)


# 定义一个子类,继承与Animal
class Dog(Animal):
    # __init__和父类的同名,重写父类同名方法
    def __init__(self):
        print('Dog类中的__init__')
        self.type = '可爱的小狗'

    # print_type和父类的同名,重写父类同名方法
    def print_type(self):
        print('Dog类中的print_type = ', self.type)


# 定义一个子类对象
dog1 = Dog()  # 调用子类的__init__
dog1.print_type()  # 调用子类的print_type()

运行结果:

Dog类中的__init__
Dog类中的print_type =  可爱的小狗

示例代码2: (支付类)

class PayClass(object):
    """支付类"""
    def pay(self):
        """付款方法"""
        pass

    def refund(self):
        """退款方法"""
        pass


class Alipay(PayClass):
    """支付宝支付"""
    def pay(self):
        """重写父类中的 pay 方法"""
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值