Python 面向对象编程的一些特征 及 单例模式的实现, 父类方法的调用(python2/python3)
一.面向对象编程几个特征(封装, 继承,多态)
1.封装:类里面封装函数和变量, 在将类进行实例化成实例对象时进行传参, 从而生成不同的实例对象,增加代码的复用. 2.继承:子类可以继承父类的方法和属性. 3.多态建立在继承的基础之上, 先有继承 才能有多态, 指子类继承父类后分别重写覆盖了父类方法.即父类的同一个方法, 在不同的子类当中表现出不同的形式
二.类对象
由python解释器根据class代码自动生成的一个对象, 由所有的实例对象共享
三.__new__()方法的作用
用于创建新的实例对象, 当需要创建实例对象时自动执行
四.__init__()方法的作用
在__new__()方法创建出来了实例对象后, 就会调用 __init__()方法, 对这个已经实例化的对象进行属性的初始化
五.单例模式的实现:(通过重写__new__()实现单例模式)
class Item(object): __instance = None # 定义一个类属性 def __new__(cls, *args, **kwargs): # 重写父类的__new__()方法, cls 指代当前类对象本身, __new__()是一个类方法 if not cls.__instance: # 如果__instance类属性没有进行赋值, 就调用父类的__new__()方法创建一个实例化的对象,并赋值给 __instance cls.__instance = object.__new__(cls) return cls.__instance # 将该实例对象进行返回, 如果__instance已经被赋值了, 就返回已经存在的__instance所指向的实例对象,从而实现单例 obj = Item() print(id(obj)) obj2 = Item() print(id(obj2))
进行输出, 发现虽然进行了两次类的实例化, 但是他们的内存id是一样的, 可以证明得到的是同一个实例对象, 单例需求得到实现:
4449800144
4449800144
注意:
1.只重写父类的__new__()方法实现单例的缺陷:
仍然可以通过调用__init__()方法, 修改已经初始化的属性, 如果需要设置初始化的属性也不可以修改, 需要改造__init__()方法:
class Item(object): __instance = None __flag = False def __new__(cls, *args, **kwargs): if not cls.__instance: cls.__instance = object.__new__(cls) return cls.__instance def __init__(self, name): # self 指向所实例化的对象本身 if not self.__flag: self.name = name self.__flag = True
obj = Item("lowman")
print(obj.name)
obj2 = Item("isbusy")
print(obj2.name)
输出:
lowman
lowman
第二次重新赋值没有生效, 需求实现
六.python2 与python3 调用父类方法(使用super()方法调用父类方法更加节省资源)
在子类的方法中直接使用super()调用父类的方法即可
python3: super().__init__(*args, **kwargs)
python2: super("当前类名", self).__init__(*args, **kwargs)
当我仰望星空, 看见了涛涛江水, 闻到了人声鼎沸;可当我蓦然回望,再也触摸不到那逝去的时光,再也看不到那夕阳下的少年!
分类:
嘿python基础
, 嘿Python面试题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗