写点什么

软件测试 / 测试开发丨 Python 学习笔记之封装、继承、多态、模块

作者:测试人
  • 2023-05-10
    北京
  • 本文字数:2190 字

    阅读完需:约 7 分钟

本文为霍格沃兹测试开发学社学员笔记分享

原文链接:https://ceshiren.com/t/topic/24692

1、封装

封装的概念

  • 封装(Encapsulation )隐藏:属性和实现细节,不允许外部直接访问暴露:公开方法,实现对内部信息的操作和访问

封装的作用

  • 限制安全的访问和操作,提高数据安全性

  • 可进行数据检查,从而有利于保证对象信息的完整性

封装的实现:隐藏

  • 保护属性:_属性名

  • 私有属性:__属性名被视作 _类名__属性名

class Account:    """账户"""
# 普通属性 bank = 'ACBC'
# 保护属性(内部属性) _username = 'good good'
# 私有属性 __password = 'happy'

print(Account.bank) # ACBCprint(Account._username) # 虽然能调用,但是不推荐使用print(Account.__password) # 会报错
复制代码

封装的实现:暴露

  • 提供数据访问功能(getter)计算属性语法:使用 @property 装饰器调用:实例.方法名

class Account:    """账户"""
# 普通属性 bank = 'ACBC'
# 保护属性(内部属性) _username = 'good good'
# 私有属性 __password = 'happy'
@property def password(self): return self.__password
# 修改私有属性,调用的是上方的属性名 @password.setter def password(self, value): # 进行校验 if len(value) >= 8: self.__password = value else: print('请输入8位以上的密码')

# 实例化对象acc = Account()# 调用私有属性print(acc.password) # happy# 修改私有属性(不满足条件)acc.password = 'hsdjhj' # 请输入8位以上的密码,不满足会使用原本密码,不会更改print(acc.password) # 打印的是happy# 修改私有属性(满足条件)acc.password = 'qwertyui' # 满足条件会更改,打印的是qwertyuiprint(acc.password)
复制代码

2、继承

继承的概念

  • 继承(Inheritance)复用父类的公开属性和方法拓展出新的属性和方法

继承的实现

  • 语法:class 类名(父类列表)

  • 默认父类是 object

  • Python 支持多继承

class Animal:    # 类属性    message = "这是Animal类的属性"
# 构造方法 def __init__(self, name, age): self.name = name self.age = age
# 实例方法 def cat(self): print("猫吃鱼")
def dog(self): print('狗吃肉')

class Panda(Animal): def eat(self): print('正在吃竹子')

# 实例化一个对象huahua = Panda('花花', 3)# 访问属性print(huahua.message)print(huahua.name, huahua.age)# 访问实例方法huahua.cat()huahua.dog()
复制代码

类型检查

  • isinstance(实例, 类名)检查对象是否是某个类及其派生类的实例

  • issubclass(类名 1, 类名 2)检查类名 1 是否是类名 2 的子类

class Human:    pass

class Student(Human): pass

class Teacher(Human): pass

# 检查实例与类之间的关系# 是继承关系就返回True,不是继承关系就返回Falsestu = Student()print(isinstance(stu, Human)) # True
# 检查类与类之间的关系# 是继承关系就返回True,不是继承关系就返回Falseprint(issubclass(Student, Teacher)) # False
复制代码

3、多态

多态的概念

  • 多态(Polymorphism)同名方法呈现多种行为

运算符的多态表现

  • +号加法:数字+数字拼接:字符串+字符串合并:列表+列表

print(1 + 1 + 2 + 3)print('hello' + ' how are you')print([1, 2, 3] + [False])
7hello how are you[1, 2, 3, False]
复制代码

函数的多态表现

  • len()函数可以接收字符串可以接收列表

print(len('hello'))  # hello有5个字符,所以显示数字5print(len([1, 2, 3] + [False]))  #前面一个列表占3个字符,加上后面一共4个
54
复制代码
  • 同名变量调用同名方法呈现多种行为

class Animal:    # 实例方法    def eat(self):        print("猫吃鱼")

class Panda: def eat(self): print('正在吃竹子')

aa = Animal()huahua = Panda()
for i in (aa, huahua): i.eat()
猫吃鱼正在吃竹子
复制代码

多态与继承

  • 方法重写(Override):子类的方法名称与父类的相同

  • 重写构造方法 super().__init__()父类名.__init__(self)

class Bird():    message = '这是父类方法'
# 构造方法 def __init__(self, name, age): self.name = name self.age = age
# 实例方法 def fly(self): print("鸟类可以飞翔")

class Ostrich(Bird): # 鸵鸟类 # 重写父类方法之super()方法 # 注意,super方法重写时有() # def __init__(self, name, age, height): # super().__init__(name, age) # self.height = height
# 重写父类方法之父类名调用 def __init__(self, name, age, height): # 父类有什么这边也要有什么 Bird.__init__(self, name, age) self.height = height

# 实例化子类方法huahua = Ostrich('huahua', 3, 49)print(huahua.name)print(huahua.height)
huahua49
复制代码

4、模块

模块就是一个.py 的文件

模块导入方法

  • import 模块名

  • from <模块名> import <方法 | 变量 | 类>

  • from <模块名> import *注意:同一模块只能导入一次 import 应该放在代码最前端

模块分类

  • 系统自带模块:sys、os、time、正则模块等

  • 第三方开源模块:使用 pip install 安装的模块

  • 自定义模块:自己写的模块


发布于: 刚刚阅读数: 3
用户头像

测试人

关注

专注于软件测试开发 2022-08-29 加入

霍格沃兹测试开发学社,测试人社区:https://ceshiren.com/t/topic/22284

评论

发布
暂无评论
软件测试/测试开发丨Python学习笔记之封装、继承、多态、模块_Python_测试人_InfoQ写作社区