python中的嵌套类(内部类调用外部类中的方法函数)

在为书中版本是3.X的,但2.X不太支持直接调用。

所以,在PYTHON2.X中,要在内部类中调用外部类的方法,就必须得实例化外部类,然后,传入实例进行调用。

花了我两个小时啊,资料没找到,自己一个一个想法调试,真的失败了三四十次,PRINT了N多~~~:)

?


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

class DiagramFactory:

 

    @classmethod

    def make_diagram(Class, width, height):

        return Class.Diagram(width, height)

 

 

    @classmethod

    def make_rectangle(Class, x, y, width, height, fill="white",

            stroke="black"):

        return Class.Rectangle(x, y, width, height, fill, stroke)

 

    @classmethod

    def make_text(Class, x, y, text, fontsize=12):

        return Class.Text(x, y, text, fontsize)

 

 

    BLANK = " "

    CORNER = "+"

    HORIZONTAL = "-"

    VERTICAL = "|"

 

 

    class Diagram:

 

        def __init__(self, width, height):

            self.superclass = DiagramFactory()

            self.width = width

            self.height = height

            self.diagram = DiagramFactory._create_rectangle(self.superclass,self.width, self.height, DiagramFactory.BLANK)

 

 

        def add(self, component):

            for y, row in enumerate(component.rows):

                for x, char in enumerate(row):

                    self.diagram[y + component.y][x + component.x] = char

 

 

        def save(self, filenameOrFile):

            file = (None if isinstance(filenameOrFile, str) else

                    filenameOrFile)

            try:

                if file is None:

                    file = open(filenameOrFile, "w")

                for row in self.diagram:

                    print >>file, "".join(row)

            finally:

                if isinstance(filenameOrFile, str) and file is not None:

                    file.close()

 

 

    class Rectangle:

 

        def __init__(self, x, y, width, height, fill, stroke):

            self.superclass = DiagramFactory()

            self.x = x

            self.y = y

            self.rows = DiagramFactory._create_rectangle(self.superclass, width, height,

                    DiagramFactory.BLANK if fill == "white" else "%")

 

 

    class Text:

 

        def __init__(self, x, y, text, fontsize):

            self.x = x

            self.y = y

            self.rows = [list(text)]

 

 

    def  _create_rectangle(self, width, height, fill):

        rows = [[fill for _ in range(width)] for _ in range(height)]

        for x in range(1, width - 1):

            rows[0][x] = DiagramFactory.HORIZONTAL

            rows[height - 1][x] = DiagramFactory.HORIZONTAL

        for y in range(1, height - 1):

            rows[y][0] = DiagramFactory.VERTICAL

            rows[y][width - 1] = DiagramFactory.VERTICAL

        for y, x in ((0, 0), (0, width - 1), (height - 1, 0),

                (height - 1, width -1)):

            rows[y][x] = DiagramFactory.CORNER

        return rows

  关键代码如下:

 

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):

。。。。。

时间: 2024-10-03 17:55:13

python中的嵌套类(内部类调用外部类中的方法函数)的相关文章

java 内部类-在外部类中为什么可以直接访问内部类的私有成员?

问题描述 在外部类中为什么可以直接访问内部类的私有成员? 在外部类中为什么可以直接访问内部类的私有成员?比如,root=root.next,这条语句出现在外部类的方法中,这里,root是定义在外部类中的一个内部类对象,而next是root对象的一个私有属性,为什么可以这样写? 解决方案 内部类是一个特例,相当于友元类(java本身没有友元这个概念) 从语法的角度来说,这样做是方便的.封装性主要是避免调用者随意操作对象的私有成员,调用他们不知道的代码引起问题.但是你定义了外部类,显然内部类也是你定

浅析Java中的嵌套类和内部类

以前看<Java编程思想>的时候,看到过嵌套类跟内部类的区别,不过后来就把它们的概念给忘了吧.昨天在看<数据结构与算法分析(Java语言版)>的时候,又遇到了这个概念,当时就很大的疑惑:嵌套类跟内部类有什么区别?只有是否有关键字static的区别吗? 所以今天找了个时间查了一下两者的详细区别,总结在这篇博客中,既方便自己的复习和学习,也启示他人吧. 1,概念: 定义在一个类内部的类,叫作"嵌套类".嵌套类分为两种:static的和非static的.后者又有一个专

详解C++编程中的嵌套类的声明与其中的函数使用_C 语言

可以在一个类的范围内声明另一个类.这样的类称为"嵌套类". 嵌套类被视为在封闭类的范围内且可在该范围内使用.若要从嵌套类的即时封闭范围之外的某个范围引用该类,则必须使用完全限定名. 下面的示例演示如何声明嵌套类: // nested_class_declarations.cpp class BufferedIO { public: enum IOError { None, Access, General }; // Declare nested class BufferedInput.

java内部类 引用外部类对象this问题

问题描述 java内部类 引用外部类对象this问题 在内部类里,想引用外部类的对象,为什么是外部类.this而不是外部类加引用变量,还有.操作应该是成员操作符吧,这样this不就成了外部类成员了 解决方案 你好,实际上我们代指当前类对象的this是个简写形式,完整的形式就是 类名字.this,举个例子来说吧 class OuterClass { private String outAttribute = "我是外部类属性"; public void printOutAttribute

java-Java静态内部类怎么调用外部类的泛型

问题描述 Java静态内部类怎么调用外部类的泛型 Java静态内部类怎么调用外部类的泛型,2个泛型可以名字一样,但是没有任何关系啊....... 解决方案 http://zhidao.baidu.com/link?url=GkDla2jig8PJLNVmNocRJCFgYmDCJx-xmnCdIpjk16jhFGwsWusJIkevnmN-UpOxyJopRo0kj3o-lWrsBKQVbCrdUPnqfUNyqep_Az8pARm 解决方案二: Java 内部类与静态类外部类 调用内部类Jav

Android 中 GridView嵌套在ScrollView里只有一行的解决方法_Android

在做android项目中遇到一个bug,GridView嵌套在ScrollView里只有一行的问题.下面小编在网上找到了解决方法,具体方法如下所示: 方法一:就是上面说的通过计算出来ListView或者GridView中的子列高度和 进行显示: public void setListViewHeightBasedOnChildren(ListView listView) { ListAdapter listAdapter = listView.getAdapter(); if (listAdap

Android 中 GridView嵌套在ScrollView里只有一行的解决方法

在做android项目中遇到一个bug,GridView嵌套在ScrollView里只有一行的问题.下面小编在网上找到了解决方法,具体方法如下所示: 方法一:就是上面说的通过计算出来ListView或者GridView中的子列高度和 进行显示: public void setListViewHeightBasedOnChildren(ListView listView) { ListAdapter listAdapter = listView.getAdapter(); if (listAdap

求教在C#使用嵌套类时,如何在内部类中使用弹出框?

问题描述 已经挣扎了好久了问题描述:publicpartialclassbmlr5:System.Web.UI.Page{...省略publicclassGridViewTemplate:Itemplate//这个是用来动态生成列的{...省略publicGridViewTemplate(bmlr5bmlr){进行了一些构造}publicGridViewTemplate(DataControlRowTypetype,stringcolname,intcolID)//动态生成列的一些方法{temp

内部类和外部类的一个问题

问题描述 class Car{class Wheel{}}class PlaneWheel extends Car.Wheel{PlaneWheel(Car car){car.super();//这里怎么理解??}public static void main(String[] args){Car car=new Car();PlaneWheel pw=new PlaneWheel(car);}} 解决方案 也许下面代码更有说服力:引用class Car {public Car() {super