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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
一、
property
属性高级用法
可以将对象方法作为属性使用
例子:
class
Foo:
def
__init__(
self
, age):
)
self
.__age
=
age
@
property
def
age(
self
):
return
self
.__age
@age.setter
def
age(
self
, args):
self
.__age
=
args
@age.deleter
def
age(
self
):
del
self
.__age
obj
=
Foo(
20
)
print
(obj.age)
obj.age
=
3
print
(obj.age)
del
obj.age
print
(obj.age)
class
Foo:
def
__init__(
self
, age):
self
.__age
=
age
def
get_age(
self
):
return
self
.__age
def
set_age(
self
, args):
self
.__age
=
args
def
del_age(
self
):
del
self
.__age
age
=
property
(get_age, set_age, del_age)
obj
=
Foo(
20
)
print
(obj.age)
obj.age
=
3
print
(obj.age)
del
obj.age
print
(obj.age)
__str__方法,默认返回对象内存地址,可以修改重写默认方法
例子:
class
Foo:
def
__init__(
self
, name, age):
self
.name
=
name
self
.age
=
age
def
__str__(
self
):
return
'name: %s, age: %s'
%
(
self
.name,
self
.age)
obj
=
Foo(
'egon'
,
'18'
)
print
(obj)
__getitem__, __setitem__,__delitem__可以通过字典的方式调用属性和方法
例子:
class
Foo:
def
__init__(
self
, name):
self
.name
=
name
def
__getitem__(
self
, item):
print
(
"getitem"
)
return
self
.__dict__[item]
def
__setitem__(
self
, key, value):
print
(
"setitem"
, key, value)
self
.__dict__[key]
=
value
def
__delitem__(
self
, key):
print
(
'del obj[key]时,执行'
)
self
.__dict__.pop(key)
obj
=
Foo(
'egon'
)
print
(obj.name)
#obj.name = 'alex'
#obj['name'] = 'alex'
print
(obj[
'name'
])
del
obj[
'name'
]
print
(obj[
'name'
])
__call__回掉函数,可以将对象变成可调用的
例子:
class
Foo:
def
__call__(
self
,
*
args,
*
*
kwargs):
print
(
'====>'
)
obj
=
Foo()
obj()
__getattr__
从对象中读取某个属性时,首先需要从
self
.__dicts__中搜索该属性,再从__getattr__中查找
__setattr__用来设置对象的属性,通过
object
中的__setattr__函数来设置属性
__delattr__用来删除对象的属性
例子:
class
Foo:
def
__init__(
self
, x):
self
.x
=
x
def
__getattr__(
self
, item):
print
(
'getattr'
)
def
__setattr__(
self
, key, value):
self
.__dict__[key]
=
value
def
__delattr__(
self
, item):
self
.__dict__.pop(item)
obj
=
Foo(
10
)
obj.x
=
1
print
(obj.__dict__)
del
obj.x
print
(obj.__dict__)
obj.a
=
1
obj.b
=
2
print
(obj.__dict__)
del
obj.a
print
(obj.__dict__)
print
(obj.aaaaaaaaa
exec
函数,将字符串中的python代码提取出来执行
例子:
s
=
"print(x)"
g
=
{
'x'
:
100000000
}
l
=
{
'x'
:
1
}
exec
(s,g,l)
s
=
"y=2"
exec
(s, g, l)
print
(g)
print
(l)
|
二、二次加工标准类
例子:
(): (itemtag=): ().(item) .tag=tag (p_object): (p_object): (%p_object) (List).append(p_object) (): mid_index=()//[mid_index] (): .tag: () ().clear() .tag=l=List([]) (l) (l.mid)
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
|
实现迭代器协议
例子:
class
Foo:
def
__init__(
self
, n, stop):
self
.n
=
n
self
.stop
=
stop
def
__next__(
self
):
if
self
.n >
self
.stop:
raise
StopIteration
x
=
self
.n
self
.n
+
=
1
return
x
def
__iter__(
self
):
return
self
obj
=
Foo(
0
,
5
)
print
(
next
(obj))
print
(
next
(obj))
print
(
next
(obj))
实现上下文管理器:
例子:
class
Foo:
def
__init__(
self
, name):
self
.name
=
name
def
__enter__(
self
):
print
(
'enter'
)
return
self
def
__exit__(
self
, exc_type, exc_val, exc_tb):
print
(
'exit'
)
with Foo(
'alex'
) as x:
print
(x)
print
(
'=>'
)
print
(
'=>'
)
print
(
'=>'
)
|
本文转自小白的希望 51CTO博客,原文链接:http://blog.51cto.com/haoyonghui/1939924,如需转载请自行联系原作者