Skip to content

Commit b0afe24

Browse files
author
comyn
committed
property_classmethod.ipynb
1 parent 05e7429 commit b0afe24

1 file changed

Lines changed: 370 additions & 0 deletions

File tree

property_classmethod.ipynb

Lines changed: 370 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,370 @@
1+
{
2+
"cells": [
3+
{
4+
"cell_type": "code",
5+
"execution_count": 6,
6+
"metadata": {
7+
"collapsed": true
8+
},
9+
"outputs": [],
10+
"source": [
11+
"class Property:\n",
12+
" def __init__(self, fget=None, fset=None, fdel=None):\n",
13+
" self.fget = fget\n",
14+
" self.fset = fset\n",
15+
" self.fdel = fdel\n",
16+
" \n",
17+
" def __get__(self, instance, cls):\n",
18+
" if self.fget is not None:\n",
19+
" return self.fget(instance)\n",
20+
" else:\n",
21+
" raise AttributeError('property not define getter')\n",
22+
" \n",
23+
" def __set__(self, instance, value):\n",
24+
" if self.fset is not None:\n",
25+
" self.fset(instance, value)\n",
26+
" else:\n",
27+
" raise AttributeError('property not define setter')\n",
28+
" \n",
29+
" def __delete__(self, instance):\n",
30+
" if self.fdel is not None:\n",
31+
" self.fdel(instance)\n",
32+
" else:\n",
33+
" raise AttributeError('property not define deleter')\n",
34+
" \n",
35+
" def setter(self, fset):\n",
36+
" self.fset = fset"
37+
]
38+
},
39+
{
40+
"cell_type": "code",
41+
"execution_count": null,
42+
"metadata": {
43+
"collapsed": true
44+
},
45+
"outputs": [],
46+
"source": [
47+
"Spam.x.__get__(spam, Spam)"
48+
]
49+
},
50+
{
51+
"cell_type": "code",
52+
"execution_count": 12,
53+
"metadata": {
54+
"collapsed": true
55+
},
56+
"outputs": [],
57+
"source": [
58+
"class Spam:\n",
59+
" def __init__(self, x):\n",
60+
" self.__x = x\n",
61+
" \n",
62+
" #@Property\n",
63+
" def x(self):\n",
64+
" return self.__x\n",
65+
" \n",
66+
" #@x.setter\n",
67+
" def set_x(self, x):\n",
68+
" self.__x = x"
69+
]
70+
},
71+
{
72+
"cell_type": "code",
73+
"execution_count": 13,
74+
"metadata": {
75+
"collapsed": false
76+
},
77+
"outputs": [
78+
{
79+
"ename": "TypeError",
80+
"evalue": "x() missing 1 required positional argument: 'self'",
81+
"output_type": "error",
82+
"traceback": [
83+
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
84+
"\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)",
85+
"\u001b[1;32m<ipython-input-13-d139d5b9aa93>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mSpam\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
86+
"\u001b[1;31mTypeError\u001b[0m: x() missing 1 required positional argument: 'self'"
87+
]
88+
}
89+
],
90+
"source": [
91+
"Spam.x()"
92+
]
93+
},
94+
{
95+
"cell_type": "code",
96+
"execution_count": 14,
97+
"metadata": {
98+
"collapsed": true
99+
},
100+
"outputs": [],
101+
"source": [
102+
"spam = Spam(6)"
103+
]
104+
},
105+
{
106+
"cell_type": "code",
107+
"execution_count": 15,
108+
"metadata": {
109+
"collapsed": false
110+
},
111+
"outputs": [
112+
{
113+
"data": {
114+
"text/plain": [
115+
"6"
116+
]
117+
},
118+
"execution_count": 15,
119+
"metadata": {},
120+
"output_type": "execute_result"
121+
}
122+
],
123+
"source": [
124+
"Spam.x(spam)"
125+
]
126+
},
127+
{
128+
"cell_type": "code",
129+
"execution_count": null,
130+
"metadata": {
131+
"collapsed": true
132+
},
133+
"outputs": [],
134+
"source": []
135+
},
136+
{
137+
"cell_type": "code",
138+
"execution_count": null,
139+
"metadata": {
140+
"collapsed": true
141+
},
142+
"outputs": [],
143+
"source": []
144+
},
145+
{
146+
"cell_type": "code",
147+
"execution_count": 8,
148+
"metadata": {
149+
"collapsed": true
150+
},
151+
"outputs": [],
152+
"source": [
153+
"spam = Spam(3)"
154+
]
155+
},
156+
{
157+
"cell_type": "code",
158+
"execution_count": null,
159+
"metadata": {
160+
"collapsed": true
161+
},
162+
"outputs": [],
163+
"source": []
164+
},
165+
{
166+
"cell_type": "code",
167+
"execution_count": 9,
168+
"metadata": {
169+
"collapsed": false
170+
},
171+
"outputs": [
172+
{
173+
"data": {
174+
"text/plain": [
175+
"3"
176+
]
177+
},
178+
"execution_count": 9,
179+
"metadata": {},
180+
"output_type": "execute_result"
181+
}
182+
],
183+
"source": [
184+
"spam.x"
185+
]
186+
},
187+
{
188+
"cell_type": "code",
189+
"execution_count": null,
190+
"metadata": {
191+
"collapsed": true
192+
},
193+
"outputs": [],
194+
"source": []
195+
},
196+
{
197+
"cell_type": "code",
198+
"execution_count": 10,
199+
"metadata": {
200+
"collapsed": false
201+
},
202+
"outputs": [],
203+
"source": [
204+
"spam.x = 4"
205+
]
206+
},
207+
{
208+
"cell_type": "code",
209+
"execution_count": 11,
210+
"metadata": {
211+
"collapsed": false
212+
},
213+
"outputs": [
214+
{
215+
"data": {
216+
"text/plain": [
217+
"4"
218+
]
219+
},
220+
"execution_count": 11,
221+
"metadata": {},
222+
"output_type": "execute_result"
223+
}
224+
],
225+
"source": [
226+
"spam.x"
227+
]
228+
},
229+
{
230+
"cell_type": "code",
231+
"execution_count": 24,
232+
"metadata": {
233+
"collapsed": true
234+
},
235+
"outputs": [],
236+
"source": [
237+
"class ClassMethod:\n",
238+
" def __init__(self, fn):\n",
239+
" self.fn = fn\n",
240+
" \n",
241+
" def __get__(self, instance, cls):\n",
242+
" def wrap(*args, **kwargs):\n",
243+
" return self.fn(cls, *args, **kwargs)\n",
244+
" return wrap"
245+
]
246+
},
247+
{
248+
"cell_type": "code",
249+
"execution_count": 32,
250+
"metadata": {
251+
"collapsed": true
252+
},
253+
"outputs": [],
254+
"source": [
255+
"class Grok:\n",
256+
" x = '123'\n",
257+
" \n",
258+
" #@ClassMethod\n",
259+
" def method(cls):\n",
260+
" print(cls.x)"
261+
]
262+
},
263+
{
264+
"cell_type": "code",
265+
"execution_count": 34,
266+
"metadata": {
267+
"collapsed": false
268+
},
269+
"outputs": [
270+
{
271+
"name": "stdout",
272+
"output_type": "stream",
273+
"text": [
274+
"123\n"
275+
]
276+
}
277+
],
278+
"source": [
279+
"Grok.method(Grok)"
280+
]
281+
},
282+
{
283+
"cell_type": "code",
284+
"execution_count": 29,
285+
"metadata": {
286+
"collapsed": true
287+
},
288+
"outputs": [],
289+
"source": [
290+
"grok = Grok()"
291+
]
292+
},
293+
{
294+
"cell_type": "code",
295+
"execution_count": 30,
296+
"metadata": {
297+
"collapsed": false
298+
},
299+
"outputs": [
300+
{
301+
"name": "stdout",
302+
"output_type": "stream",
303+
"text": [
304+
"123\n"
305+
]
306+
}
307+
],
308+
"source": [
309+
"grok.method()"
310+
]
311+
},
312+
{
313+
"cell_type": "code",
314+
"execution_count": null,
315+
"metadata": {
316+
"collapsed": true
317+
},
318+
"outputs": [],
319+
"source": []
320+
},
321+
{
322+
"cell_type": "code",
323+
"execution_count": null,
324+
"metadata": {
325+
"collapsed": true
326+
},
327+
"outputs": [],
328+
"source": []
329+
},
330+
{
331+
"cell_type": "code",
332+
"execution_count": null,
333+
"metadata": {
334+
"collapsed": true
335+
},
336+
"outputs": [],
337+
"source": []
338+
},
339+
{
340+
"cell_type": "code",
341+
"execution_count": null,
342+
"metadata": {
343+
"collapsed": true
344+
},
345+
"outputs": [],
346+
"source": []
347+
}
348+
],
349+
"metadata": {
350+
"kernelspec": {
351+
"display_name": "Python 3",
352+
"language": "python",
353+
"name": "python3"
354+
},
355+
"language_info": {
356+
"codemirror_mode": {
357+
"name": "ipython",
358+
"version": 3
359+
},
360+
"file_extension": ".py",
361+
"mimetype": "text/x-python",
362+
"name": "python",
363+
"nbconvert_exporter": "python",
364+
"pygments_lexer": "ipython3",
365+
"version": "3.4.2"
366+
}
367+
},
368+
"nbformat": 4,
369+
"nbformat_minor": 0
370+
}

0 commit comments

Comments
 (0)