面向对象编程思想之路···

Lida ·
更新时间:2024-11-10
· 513 次阅读

面向对象笔记整理

最近一直在学习面向对象编程的思维,逐渐的理解是最大的收获了,对本周学习的笔记进行一个小结(可能会比较乱),如果有更好的学习方法也请推荐一波吧!

一.面向对象的三个基本特征。

1. 封装性
2. 继承性
3. 多态性

① 定义类:格式:
class 类名(父类):
         类体
进一步采用 . or .() 体现类功能

实例变量 def __init__(self,)
类变量 类中的变量,所有实例(或对象)所共有
构造方法 __init__不用传入self参数
实例方法 self.实例变量。 调用实例方法不需传入self参数
类方法 类对象的方法,由所有实例对象共享。采用 .() or.()注意☆:1.需要加@classmethod装饰器 2. 第一个参数约定为cls
静态方法 定义在类中的普通函数,能够被所有实例对象共享。 采用.() or .() 注意☆:1.静态方法可以没有参数。2.需要加@staticmethod声明3.不可以操作实例属性和实例方法
自由方法 类中的普通函数。实例方法采用.()方法使用
保佑方法 由双下划线开始和结束的方法。e.g. __len__()
私有方法 只需要在方法前加双下划线即可def __run(self): 接函数体

私有变量:在变量前 下双下划线__,(并非真正私有),如要访问,命名规律为_类名__变量 就可以访问量。

② 继承性
super()函数:可以访问已在类对象中覆盖的继承方法。

@abstractmethod
抽象方法:不能被实例化(创建对象),它的存在就是让更多的人去继承它。
(+一个 个人觉得比较好理解的实例)

from abc import ABCMeta, abstractmethod class Pet(object, metaclass=ABCMeta): """宠物""" def __init__(self, nickname): self._nickname = nickname @abstractmethod def make_voice(self): """发出声音""" pass class Dog(Pet): """狗""" def make_voice(self): print('%s: 汪汪汪...' % self._nickname) class Cat(Pet): """猫""" def make_voice(self): print('%s: 喵...喵...' % self._nickname) def main(): pets = [Dog('旺财'), Cat('凯蒂'), Dog('大黄')] for pet in pets: pet.make_voice() if __name__ == '__main__': main()

多继承的特点
当子类实例调用一个方法时,先从子类中查找,如果没有找到则查找父类。
查找顺序安子类声明父类列表从左往右中查找,如找不到父类再找父类的父类。

多态的概念:1.继承——多态发生一定是子类和父类之间
              2.重写——子类重写父类的方法

③ 枚举类(本质上也是一种类: import enum)
在python 中定义枚举类语法格式如下:
class 枚举类名 (enum.Enum):
  枚举常量列表

枚举类继承自enum.Enum 类。 枚举中会定义多个常量成员。给个示例:

import enum class WeekDay(enum.Enum): #枚举常量列表 MONDAY = 1 TUESDAY = 2 WEDNESDAY = 3 THURSDAY = 4 FRIDAY = 10 day = WeekDays.FRIDAY print(day) print(day.value) print(day.name)

输出结果:
WeekDays.FRIDAY
10
FRIDAY

4.限制枚举类
为了使枚举常量成员只能是整数类型: enum.IntEnum作为父类
防止常量重复: @enum.unique 装饰器(如果常量重复报错)
代码示例:

import enum @enum.unique #装饰器 class WeekDay(enum.IntEnum): #只能是整数类型 #枚举常量列表 MONDAY = 1 TUESDAY = 2 WEDNESDAY = 3 THURSDAY = 4 FRIDAY = 10 day = WeekDays.FRIDAY print(day) print(day.value) print(day.name)

如果尝试将其中的成员值修改为非整数类型,或者修改相同值,则发生异常。

这次的分享到这里,如有整理错误之处,留下宝贵意见。
希望自己早日脱离小白之称·
····


作者:焦虑区ing



面向对象编程 对象 编程思想 面向对象

需要 登录 后方可回复, 如果你还没有账号请 注册新账号
相关文章