内置方法 常用模块

__new__

在init 之前 , 实例化对象的第一步是__new__创建一个空间

class Foo:
    def __init__(self):                 # 初始化方法
        print('执行了init')
    def __new__(cls, *args, **kwargs):  # 构造方法
        # object.__new__(cls)
        print('执行了new')
        return object.__new__(cls)     #如果这个return不写,init方法永远不会执行

obj = Foo()

执行了new    先执行new
执行了init

 

创造一个对象  比喻成  捏小人

new 是小人捏出来

init 是小人穿衣服

 

设计模式  常用的23种

源头是从java里来得  因为Java 开发一个项目 很庞大,个方面人员需要配合,就相应出了一些标准,这样比较好对接。

python  :

  推崇设计模式 :会java 也会python  从java转的python

  贬低设计模式:纯python开发  因为python 一两个人就可以开发一个项目

单例模式:   一个类 只有一个实例  

class Foo:
    __instance = None
    def __init__(self,name,age):                 # 初始化方法
        self.name = name
        self.age = age
        self.lst = [name] 
        #self.lst = [age] 那就只打印年龄 上面的name 被覆盖
        # self。lst = [name,age] 打印名字和年龄
def __new__(cls, *args, **kwargs): # 构造方法 if cls.__instance is None: cls.__instance = object.__new__(cls) return cls.__instance obj1 = Foo('alex',20) obj2 = Foo('egon',22) print(obj1.lst,obj2.lst)       最后结果 print ['egon'] ['egon']

__del__

class Foo:
    def __init__(self,name,age):
        self.name = name
        self.age = age
        self.file = open('file',mode = 'w')
    def write(self):
        self.file.write('sjahgkldhgl')
    def __del__(self):    # 析构方法 : 在删除这个类创建的对象的时候会先触发这个方法,再删除对象
        # 做一些清理工作,比如说关闭文件,关闭网络的链接,数据库的链接
        self.file.close()
        print('执行del了')

f = Foo('alex',20)                   # 只要写了这个__del__ 这个方法,他必定执行,所以可以写一个关闭文件放着,以防别人忘记关或者自己,写这个方法上个保险
print(f)                              这个方法就是垫底的 别的程序走完 然后走他 最后一道保险

__len__

 和len( )这个内置函数  其实差不多  int 和float  不适用  这个__len__同样不适用

# len()  lst dict set str

# print('__len__' in dir(list))
# print('__len__' in dir(dict))
# print('__len__' in dir(set))
# print('__len__' in dir(tuple))
# print('__len__' in dir(str))
#

# print('__len__' in dir(int))
# print('__len__' in dir(float))    #后面两个都是返回 False

__eq__

可以自定义   两个值是否相等

__hash__

class Foo():
    pass

obj1 = Foo()
obj2 = Foo()
print(hash(obj1)) 
print(hash(obj1))

两个对象的内存地址都不一样

 

posted @ 2018-09-03 23:15  一个稳定抗压的人  阅读(162)  评论(0编辑  收藏  举报