在為書中版本是3.x的,但2.x不太支援直接調用。
是以,在python2.x中,要在内部類中調用外部類的方法,就必須得執行個體化外部類,然後,傳入執行個體進行調用。
花了我兩個小時啊,資料沒找到,自己一個一個想法調試,真的失敗了三四十次,print了n多~~~:)
<a href="http://www.cnblogs.com/aguncn/p/4200113.html#">?</a>
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
<code>class</code> <code>diagramfactory:</code>
<code> </code><code>@classmethod</code>
<code> </code><code>def</code> <code>make_diagram(class, width, height):</code>
<code> </code><code>return</code> <code>class.diagram(width, height)</code>
<code> </code><code>def</code> <code>make_rectangle(class, x, y, width, height, fill</code><code>=</code><code>"white"</code><code>,</code>
<code> </code><code>stroke</code><code>=</code><code>"black"</code><code>):</code>
<code> </code><code>return</code> <code>class.rectangle(x, y, width, height, fill, stroke)</code>
<code> </code><code>def</code> <code>make_text(class, x, y, text, fontsize</code><code>=</code><code>12</code><code>):</code>
<code> </code><code>return</code> <code>class.text(x, y, text, fontsize)</code>
<code> </code><code>blank</code><code>=</code> <code>" "</code>
<code> </code><code>corner</code><code>=</code> <code>"+"</code>
<code> </code><code>horizontal</code><code>=</code> <code>"-"</code>
<code> </code><code>vertical</code><code>=</code> <code>"|"</code>
<code> </code><code>class</code> <code>diagram:</code>
<code> </code><code>def</code> <code>__init__(</code><code>self</code><code>, width, height):</code>
<code> </code><code>self</code><code>.superclass</code><code>=</code> <code>diagramfactory()</code>
<code> </code><code>self</code><code>.width</code><code>=</code> <code>width</code>
<code> </code><code>self</code><code>.height</code><code>=</code> <code>height</code>
<code> </code><code>self</code><code>.diagram</code><code>=</code> <code>diagramfactory._create_rectangle(</code><code>self</code><code>.superclass,</code><code>self</code><code>.width,</code><code>self</code><code>.height, diagramfactory.blank)</code>
<code> </code><code>def</code> <code>add(</code><code>self</code><code>, component):</code>
<code> </code><code>for</code> <code>y, row</code><code>in</code> <code>enumerate</code><code>(component.rows):</code>
<code> </code><code>for</code> <code>x, char</code><code>in</code> <code>enumerate</code><code>(row):</code>
<code> </code><code>self</code><code>.diagram[y</code><code>+</code> <code>component.y][x</code><code>+</code> <code>component.x]</code><code>=</code> <code>char</code>
<code> </code><code>def</code> <code>save(</code><code>self</code><code>, filenameorfile):</code>
<code> </code><code>file</code> <code>=</code> <code>(</code><code>none</code> <code>if</code> <code>isinstance</code><code>(filenameorfile,</code><code>str</code><code>)</code><code>else</code>
<code> </code><code>filenameorfile)</code>
<code> </code><code>try</code><code>:</code>
<code> </code><code>if</code> <code>file</code> <code>is</code> <code>none</code><code>:</code>
<code> </code><code>file</code> <code>=</code> <code>open</code><code>(filenameorfile,</code><code>"w"</code><code>)</code>
<code> </code><code>for</code> <code>row</code><code>in</code> <code>self</code><code>.diagram:</code>
<code> </code><code>print</code> <code>>></code><code>file</code><code>, "".join(row)</code>
<code> </code><code>finally</code><code>:</code>
<code> </code><code>if</code> <code>isinstance</code><code>(filenameorfile,</code><code>str</code><code>)</code><code>and</code> <code>file</code> <code>is</code> <code>not</code> <code>none</code><code>:</code>
<code> </code><code>file</code><code>.close()</code>
<code> </code><code>class</code> <code>rectangle:</code>
<code> </code><code>def</code> <code>__init__(</code><code>self</code><code>, x, y, width, height, fill, stroke):</code>
<code> </code><code>self</code><code>.x</code><code>=</code> <code>x</code>
<code> </code><code>self</code><code>.y</code><code>=</code> <code>y</code>
<code> </code><code>self</code><code>.rows</code><code>=</code> <code>diagramfactory._create_rectangle(</code><code>self</code><code>.superclass, width, height,</code>
<code> </code><code>diagramfactory.blank</code><code>if</code> <code>fill</code><code>=</code><code>=</code> <code>"white"</code> <code>else</code> <code>"%"</code><code>)</code>
<code> </code><code>class</code> <code>text:</code>
<code> </code><code>def</code> <code>__init__(</code><code>self</code><code>, x, y, text, fontsize):</code>
<code> </code><code>self</code><code>.rows</code><code>=</code> <code>[</code><code>list</code><code>(text)]</code>
<code> </code><code>def</code> <code>_create_rectangle(</code><code>self</code><code>, width, height, fill):</code>
<code> </code><code>rows</code><code>=</code> <code>[[fill</code><code>for</code> <code>_</code><code>in</code> <code>range</code><code>(width)]</code><code>for</code> <code>_</code><code>in</code> <code>range</code><code>(height)]</code>
<code> </code><code>for</code> <code>x</code><code>in</code> <code>range</code><code>(</code><code>1</code><code>, width</code><code>-</code> <code>1</code><code>):</code>
<code> </code><code>rows[</code><code>0</code><code>][x]</code><code>=</code> <code>diagramfactory.horizontal</code>
<code> </code><code>rows[height</code><code>-</code> <code>1</code><code>][x]</code><code>=</code> <code>diagramfactory.horizontal</code>
<code> </code><code>for</code> <code>y</code><code>in</code> <code>range</code><code>(</code><code>1</code><code>, height</code><code>-</code> <code>1</code><code>):</code>
<code> </code><code>rows[y][</code><code>0</code><code>]</code><code>=</code> <code>diagramfactory.vertical</code>
<code> </code><code>rows[y][width</code><code>-</code> <code>1</code><code>]</code><code>=</code> <code>diagramfactory.vertical</code>
<code> </code><code>for</code> <code>y, x</code><code>in</code> <code>((</code><code>0</code><code>,</code><code>0</code><code>), (</code><code>0</code><code>, width</code><code>-</code> <code>1</code><code>), (height</code><code>-</code> <code>1</code><code>,</code><code>0</code><code>),</code>
<code> </code><code>(height</code><code>-</code> <code>1</code><code>, width</code><code>-</code><code>1</code><code>)):</code>
<code> </code><code>rows[y][x]</code><code>=</code> <code>diagramfactory.corner</code>
<code> </code><code>return</code> <code>rows</code>
關鍵代碼如下:
self.superclass = diagramfactory()
self.width = width
self.height = height
self.diagram = diagramfactory._create_rectangle(self.superclass,self.width, self.height, diagramfactory.blank)
。。。。
def _create_rectangle(self, width, height, fill):
。。。。。
