Python从门到精通(二):包装-06-对象高级功能
  TEZNKK3IfmPf 2024年03月29日 85 0
mport collections
import bisect

class SortedItems(collections.Sequence):
def __init__(self, initial=None):
self._items = sorted(initial) if initial is not None else []

# Required sequence methods
def __getitem__(self, index):
return self._items[index]

def __len__(self):
return len(self._items)

# Method for adding an item in the right location
def add(self, item):
bisect.insort(self._items, item)

item_list = SortedItems([5, 1, 3])
print(f'item list = {list(item_list)}')
print(f'item_list[0] = {item_list[0]}, item_list[-1] = {item_list[-1]}')
item_list.add(2)
print(f'item_list = {list(item_list)}')
class Items(collections.MutableSequence):
def __init__(self, initial=None):
self._items = list(initial) if initial is not None else []

# Required sequence methods
def __getitem__(self, index):
return self._items[index]

def __setitem__(self, index, value):
self._items[index] = value

def __delitem__(self, index):
del self._items[index]

def insert(self, index, value):
self._items.insert(index, value)

def __len__(self):
return len(self._items)


a_item = Items([1, 2, 3])
print(f'len of a is: {len(a_item)}')

a_item.append(4)
a_item.append(2)
a_item.count(2)
a_item.remove(2)

二、创建单例

import weakref

class CachedSpamManager2:
def __init__(self):
self._cache = weakref.WeakValueDictionary()

def get_spam(self, name):
if name not in self._cache:
temp = Spam3._new(name) # Modified creation
self._cache[name] = temp
else:
temp = self._cache[name]
return temp

def clear(self):
self._cache.clear()

class Spam3:
def __init__(self, *args, **kwargs):
raise RuntimeError("Can't instantiate directly")

# Alternate constructor
@classmethod
def _new(cls, name):
self = cls.__new__(cls)
self.name = name
return self

三、Mixin功能

def logged_mapping(cls):
"""第二种方式:使用类装饰器"""
cls_getitem = cls.__getitem__
cls_setitem = cls.__setitem__
cls_delitem = cls.__delitem__

def __getitem__(self, key):
print(f'Getting {str(key)}')
return cls_getitem(self, key)

def __setitem__(self, key, value):
print(f'Setting {key} = {value!r}')
return cls_setitem(self, key, value)

def __delitem__(self, key):
print(f'Deleting {str(key)}')
return cls_delitem(self, key)

cls.__getitem__ = __getitem__
cls.__setitem__ = __setitem__
cls.__delitem__ = __delitem__
return cls


@logged_mapping
class LoggedDict(dict):
pass

d = LoggedDict()
d['x'] = 23
print(f"d['x'] = {d['x']}")
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2024年03月29日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2024年05月31日   30   0   0 python开发语言
  TEZNKK3IfmPf   2024年05月31日   24   0   0 python
  TEZNKK3IfmPf   2024年05月31日   22   0   0 python
TEZNKK3IfmPf