Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Latest commit

 

History

History
History
47 lines (35 loc) · 1.57 KB

File metadata and controls

47 lines (35 loc) · 1.57 KB
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# _*_ coding: utf-8 _*_
"""
python_magic_methods.py by xianhu
"""
# 定义一个能够自动比较大小的People类
class People(object):
def __init__(self, name, age):
self.name = name
self.age = age
return
def __str__(self):
return self.name + ":" + str(self.age)
def __lt__(self, other):
return self.name < other.name if self.name != other.name else self.age < other.age
print("\t".join([str(item) for item in sorted([People("abc", 18), People("abe", 19), People("abe", 12), People("abc", 17)])]))
# Python实现任意深度的赋值 例如a[0] = 'value1'; a[1][2] = 'value2'; a[3][4][5] = 'value3'
class MyDict(dict):
def __setitem__(self, key, value): # 该函数不做任何改动 这里只是为了输出
print("setitem:", key, value, self)
super().__setitem__(key, value)
return
def __getitem__(self, item): # 主要技巧在该函数
print("getitem:", item, self)
# 基本思路: a[1][2]赋值时 需要先取出a[1] 然后给a[1]的[2]赋值
if item not in self: # 如果a[1]不存在
temp = MyDict() # 则需要新建一个dict
super().__setitem__(item, temp) # 并使得a[1] = dict
return temp # 返回a[1] 使得a[1][2] = value有效
return super().__getitem__(item) # 如果a[1]存在 则直接返回a[1]
# 使用例子:
test = MyDict()
test[0] = 'test'
test[1][2] = 'test1'
test[3][4][5] = 'test2'
print("==========================")
Morty Proxy This is a proxified and sanitized view of the page, visit original site.