zoukankan      html  css  js  c++  java
  • 面向对象进阶

    ####设计模式中
    ####什么是单例模式?
    ##单例模式是软件设计模式中,较为常用,简单的一种.
    ##目的:单利模式可以保证系统中,应用模式的类一个类只有一个实例,即一个类只有一个对象实例
    ##静态方法(类方法)也可以生成
    ##要点:
    ##1.某个类只能有一个实例
    ##2.他必须自行创建这个实例
    ##3.它必须自行向整个系统提供这个实例
    ##优点
    ##1.实例控制:单例模式会阻止其他对象实例化自己的单例对象副本,从而确保所有对象都访问唯一实例
    ##
    ##2.灵活性:因为控制了实例化过程,所以类可以灵活更改实例化过程
    ##
    ##缺点
    ##1.开销:虽然数量很少,但如果每次对象请求引用时都要检查是否存在类的实例.可以通过静态初始化解决问题
    ##
    ##2.可能的开发混淆:
    ##3.对象生存期
    ####一个类可以被多次实例化但是同一时间在python内存中,只能有一个实例
    ###标准方法
    ##
    ##class A:
    ## _instance = None
    ## def __init__(self,name):
    ##
    ## self.name = name
    ##
    ## def __new__(cls,*args,**lwargs):
    ##
    ## if not A._instance:
    ## A._instance = object.__new__(cls)
    ## return A._instance
    ##
    ##a1=A("alex")
    ##print(a1.name)
    ##a2 = A("egon")
    ##print(a1.name,a2.name)
    ##
    ##
    ##
    ###第二种方法
    ##class A:
    ## name = "Alex"
    ##
    ## @classmethod
    ## def func(cls):
    ## pass
    ##A.name = "Egon"


    ####__dict__方法 查看类里面的属性,返回格式为字典
    ##class A:
    ## def __init__(self,name):
    ## self.name=name
    ##a=A("aal")
    ##print(a) #<__main__.A object at 0x000001B869AC4EF0>一个对象的id地址
    ##
    ##
    ##print(a.__dict__)#{'name': 'aal'}


    ####__del__方法
    ####析构方法:删除一个对象的时候调用的方法
    ##import time
    ##class A():
    ## def __init__(self):
    ## self.f=open("userinfo","a")
    ## def consume(self):
    ## pass
    ## def __del__(self):
    ## self.f.close()
    ## print("删除一个对象的时候调用")
    ##a=A()
    ##time.sleep(1)
    ##del a
    ##
    ####删除一个对象的时候,如果内部存在__del__方法,
    ####那么在删除对象之前执行__del__方法中的代码
    ##print(a)


    ##item系列有三种
    ##
    ##1.getitem(self.key) 这个方法返回所给键值对应的值
    ##
    ##2.setitem(self,key,value) 这个方法应该按一定的方式储存和key相关的value
    ##
    ##3.delitem(self,key) 这个方法在对一部分对象使用del语句时被调用,同时必须删除和键相关的键.

    ##练习
    ##class A:
    ## def __init__(self,name):
    ## self.name = name
    ## self.age = 81
    ## def __getitem__(self,item):
    ## return self.__dict__[item]
    ## def __setitem__(self,key,value):
    ## self.__dict__[key] = value
    ## def __delitem__(self,key):
    ## del self.__dict__[key]
    ##a = A("alex")
    ##print(a)#<__main__.A object at 0x0000018B29EE4EB8>
    ##print(a["name"])#alex
    ##print(a.age)#81
    ##print(a["age"])#81
    ##a["sex"]="不详"
    ##print(a.sex)#不详
    ##print(a.__dict__)#{'name': 'alex', 'age': 81, 'sex': '不详'}
    ##a["sex"]="男"
    ##print(a.sex)
    ##print(a.__dict__)
    ##del a["sex"]
    ##print(a.__dict__)#{'name': 'alex', 'age': 81}

    ##__call__方法 实例()可以直接调用__call__函数
    ##class A:
    ## def __call__(self,a):
    ## print("执行我了",a)
    ## def call(self,a):
    ## print("执行我了",a)
    ##a = A()
    ##a("aaa")
    ##a.call("aaa")

    #object.__new__方法 创造一个对象
    ##class A:
    ## def __init__(self):
    ## print("init")
    ## def __new__(cls):
    ## print("new")
    ## return object.__new__(cls)
    ##a=A()
    ##print(type(a))#<class '__main__.A'>
    ##print(type(A))#<class 'type'>
    ##
    ##先执行__new__方法 创造出一个对象
    ##然后把创造出来的对象传递给init方法
    ##会把self自动返回,被a接收
    ##
    ##元类
    ##有一个元类 在创建类
    # type() 所有直接用class创建出来的类的元类都是type

    # class 类名(B,classMeta = 元类名)ABCMeta @abc.abstractmethod
    # class 类名(B,classMeta = type) # 默认

    # 元类 创造 类 所以所有的类的type都是它的元类,默认是type
    # 类 创造 对象 具体创造对象的方法 __new__方法,所有的对象的type都是它对应的类

    # python中 一切皆对象
    # 变量 都有它属于的数据类型


    #__hash__方法 不可变的数据类型都可以被hash哈希

    ##class A:pass
    ##def __hash__(self):
    ## return 1
    ##a=A()
    ##b=A()
    ##print(hash(a))
    ##print(hash(b))

    # dict的key set的元素
    # dic key --> value
    # dic[key] = value

    # hash(obj)函数,obj对象对应的类必然内部实现了__hash__方法
    # hash的结果就是__hash__方法的返回值
    # 且在一次成的执行过程中是不会发生变化的
    # 且要想作为字典的key或者作为集合的元素,这个对象对应的类必须实现__hash__方法

     

  • 相关阅读:
    Python之路_Day6
    正则表达式
    tensorflow 使用 5 mnist 数据集, softmax 函数
    数据分析 大数据之路 六 matplotlib 绘图工具
    tensorflow 使用 4 非线性回归
    tensorflow 使用 3 模型学习
    数据分析 大数据之路 五 pandas 报表
    tensorflow 使用 2 Felch ,Feed
    tensorflow 使用 1 常量,变量
    数据分析 大数据之路 四 numpy 2
  • 原文地址:https://www.cnblogs.com/cangshuchirou/p/8559046.html
Copyright © 2011-2022 走看看