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)
=  "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
         =  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,如需转载请自行联系原作者