天天看點

python中的嵌套類(内部類調用外部類中的方法函數)

在為書中版本是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>&gt;&gt;</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):

。。。。。

python中的嵌套類(内部類調用外部類中的方法函數)