首页 技术 正文
技术 2022年11月12日
0 收藏 530 点赞 4,935 浏览 1428 个字

一.面向对象编程几个特征(封装, 继承,多态)

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)

    

下一篇: jzoj5805
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,487
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,903
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,736
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,487
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,127
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,289