zoukankan      html  css  js  c++  java
  • 24,内置方法的应用,(实现单利模式)

    __new__:创建出一个对象

    __init__:初始化方法

    # __new__  创建一个对象
    # class A:
    #     def __init__(self):
    #         print('init')
    #     def __new__(cls, *args, **kwargs):
    #         print('new')
    #         self = object.__new__(cls)
    #         return self
    # object __new__创造对象
    # a = A()
    算法和设计模式
    设计模式 —— java开发过程中的一种规范或者设计范式
    class A:
        __instance = None
        def __init__(self,name):
            self.name = name
        def __new__(cls, *args, **kwargs):
            if not cls.__instance:
                cls.__instance = object.__new__(cls)
            return cls.__instance
    a = A(54)
    b = A(56)
    print(a is b)
    print(id(a))
    print(id(b))
    print(a.name)
    print(b.name)
    print(hash(a))
    print(hash(b)

    __del__:析构方法:

    对应着一个对象的删除之前执行的内容

    python解释器

    #能够主动回收不用的变量

    #在程序结束的时候所有的数据都会被清除

    #如果用户主动删除某个变量,那么这个变量将会主动的被删除。

    无论上述哪种方式:

    在删除一个变量之前都会主动执行析构方法__del__

    class B:
        def __del__(self):
            print('heheh')
    BA = B()
    del BA
    print(BA)
    class B:
        def __init__(self,path):
            self.f = open(path)
        def __del__(self):
            self.f.close() #对象删除之前回归一些操作系统资源。
    BA = B('userinfo')

    Item系列:打辅助的功能

    实现了之后,就是使用[]去做一些事情了。

    有一些内置模块中的内置方法是依赖__getitem__调用方法的

    或者说是依赖item[‘a’]这种调用方式的。

    class Item:
        def __getitem__(self, item):#定义getitem可以使用[]方法。
            print('...',item)
            return self.__dict__[item]
        def __setitem__(self, key, value):
            self.__dict__[key] = value
            print(key,value)
        # def __delitem__(self, key):
        #     self.__dict__.pop(key)
    item = Item()
    # print(item.__dict__)
    item['a'] = 'alex' #在创建或者修改的时候,是通过setiem创建的,如果没有该方法,不能创建。
    print(item['a'])
    print(item.__dict__)
    # del item.a
    del item['a']
    print(item.__dict__)#在执行删除对象属性的时候,是通过__delitem__删除的,如果没有该方法,不能创建。

    扑克

    from collections import namedtuple
    Card = namedtuple('Card',['rank','suit'])  # 属性一旦创建就不再改变了,且可以使用属性名直接访问值
    card1 = Card('K','黑桃')
    print(card1.rank)
    print(card1.suit)
    
    class FranchDeck:
        ranks = [str(n) for n in range(2,11)] + list('JQKA')
        suits = ['红心','方板','梅花','黑桃']
    
        def __init__(self):
            self._cards = [Card(rank,suit) for rank in FranchDeck.ranks
                                            for suit in FranchDeck.suits]
    
        def __len__(self):
            return len(self._cards)
    
        def __getitem__(self, item):
            return self._cards[item]
    
    deck = FranchDeck()
    # print(deck._cards[0])   #
    print(deck[0])
    from random import choice
    print(choice(deck))   # choice接收iterable,__len__,__getitem__
    print(choice(deck._cards))   # choice接收iterable,__len__,__getitem__
    print(choice(deck))
    print(choice(deck))
    print(choice(deck))
    print(choice(deck))

    进阶版扑克

    from collections import namedtuple
    Card = namedtuple('Card',['rank','suit'])
    class FranchDeck:
        ranks = [str(n) for n in range(2,11)] + list('JQKA')
        suits = ['红心','方板','梅花','黑桃']
    
        def __init__(self):
            self._cards = [Card(rank,suit) for rank in FranchDeck.ranks
                                            for suit in FranchDeck.suits]
    
        def __len__(self):
            return len(self._cards)
    
        def __getitem__(self, item):
            return self._cards[item]
    
        def __setitem__(self, item,value):
            self._cards[item]  = value
    
    deck = FranchDeck()
    from random import shuffle
    # shuffle(deck._cards)
    # print(deck._cards)
    shuffle(deck)     # __len__(self) __getitem__ __setitem__
    print(deck._cards)
  • 相关阅读:
    【转】PCA for opencv
    【转】PCA算法学习_1(OpenCV中PCA实现人脸降维)
    从输入URL到页面渲染完成(转)
    前端面试笔记(整理)
    这样“断舍离”,你会活得更高级
    angular5.x全局loading解决方法
    angular路由守卫
    优化回流和重绘
    回流 (Reflow)和重绘 (Repaint)
    Javascript获取数组中最大和最小值
  • 原文地址:https://www.cnblogs.com/ZJGG/p/9117275.html
Copyright © 2011-2022 走看看