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

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

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

  1. class DiagramFactory:
  2.  
  3. @classmethod
  4. def make_diagram(Class, width, height):
  5. return Class.Diagram(width, height)
  6.  
  7. @classmethod
  8. def make_rectangle(Class, x, y, width, height, fill="white",
  9. stroke="black"):
  10. return Class.Rectangle(x, y, width, height, fill, stroke)
  11.  
  12. @classmethod
  13. def make_text(Class, x, y, text, fontsize=12):
  14. return Class.Text(x, y, text, fontsize)
  15.  
  16. BLANK = " "
  17. CORNER = "+"
  18. HORIZONTAL = "-"
  19. VERTICAL = "|"
  20.  
  21. class Diagram:
  22.  
  23. def __init__(self, width, height):
  24. self.superclass = DiagramFactory()
  25. self.width = width
  26. self.height = height
  27. self.diagram = DiagramFactory._create_rectangle(self.superclass,self.width, self.height, DiagramFactory.BLANK)
  28.  
  29. def add(self, component):
  30. for y, row in enumerate(component.rows):
  31. for x, char in enumerate(row):
  32. self.diagram[y + component.y][x + component.x] = char
  33.  
  34. def save(self, filenameOrFile):
  35. file = (None if isinstance(filenameOrFile, str) else
  36. filenameOrFile)
  37. try:
  38. if file is None:
  39. file = open(filenameOrFile, "w")
  40. for row in self.diagram:
  41. print >>file, "".join(row)
  42. finally:
  43. if isinstance(filenameOrFile, str) and file is not None:
  44. file.close()
  45.  
  46. class Rectangle:
  47.  
  48. def __init__(self, x, y, width, height, fill, stroke):
  49. self.superclass = DiagramFactory()
  50. self.x = x
  51. self.y = y
  52. self.rows = DiagramFactory._create_rectangle(self.superclass, width, height,
  53. DiagramFactory.BLANK if fill == "white" else "%")
  54.  
  55. class Text:
  56.  
  57. def __init__(self, x, y, text, fontsize):
  58. self.x = x
  59. self.y = y
  60. self.rows = [list(text)]
  61.  
  62. def _create_rectangle(self, width, height, fill):
  63. rows = [[fill for _ in range(width)] for _ in range(height)]
  64. for x in range(1, width - 1):
  65. rows[0][x] = DiagramFactory.HORIZONTAL
  66. rows[height - 1][x] = DiagramFactory.HORIZONTAL
  67. for y in range(1, height - 1):
  68. rows[y][0] = DiagramFactory.VERTICAL
  69. rows[y][width - 1] = DiagramFactory.VERTICAL
  70. for y, x in ((0, 0), (0, width - 1), (height - 1, 0),
  71. (height - 1, width -1)):
  72. rows[y][x] = DiagramFactory.CORNER
  73. 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):

。。。。。

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

  1. Python内部类,内部类调用外部类属性,方法

    一 Python中内部类 典型定义: class MyOuter: age=18 def __init__(self,name): self.name=name class MyInner: def ...

  2. Java嵌套类,内部类和外部类

    1.嵌套类,内部类 嵌套类是指被定义在一个类内部的类: JAVA的嵌套类有很多种类:1.静态成员类:2.非静态成员类:3.匿名类:4.局部类:其中,除了静态成员类之外,其他的都是内部类,因为静态成员类 ...

  3. “全栈2019”Java第八十二章:嵌套接口能否访问外部类中的成员?

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  4. Java调用外部类定义的方法(Static与无Static两种)

    首先定义方法 public class Dy { public int Add(int x,int y){ //定义Add(),该方法没有被static修饰 return x+y; } public ...

  5. 【转】C++之内部类(嵌套类)与外部类及友元

    [转]http://baike.baidu.com/link?url=Md223wQoT5s-3cZ5xRnj1pGmvm310DKAuh-HDrcEdc2l24rwobHrdEc_Mi4Z3BGP0 ...

  6. Java内部类引用外部类中的局部变量为何必须是final问题解析

    今天编写一个多线程程序,发现在方法内定义内部类时,如果内部类调用了方法中的变量,那么该变量必须申明为final类型,百思不得其解,后来想到应该是生命周期的原因,因为方法内定义的变量是局部变量,离开该方 ...

  7. C++之内部类(嵌套类)与外部类及友元

    本人能力.精力有限,所言所感都基于自身的实践和有限的阅读.查阅,如有错误,欢迎拍砖,敬请赐教——博客园:钱智慧. 先上代码: class Outer { public: Outer(){m_outer ...

  8. kotlin中的嵌套类与内部类

    Java中的内部类和静态内部类在Java中内部类简言之就是在一个类的内部定义的另一个类.当然在如果这个内部类被static修饰符修饰,那就是一个静态内部类.关于内部类 和静态内部类除了修饰符的区别之外 ...

  9. C++嵌套类(内部类与外部类)

    在一个类中定义的类被称为嵌套类,定义嵌套类的类被称为外部类.; //不能访问 mytest::i = 10;//不能访问 } private: class mytest { int i; int j; ...

随机推荐

  1. oschina企业应用

    企业应用 6企业搜索引擎 20ESB企业服务总线 34LaTeX排版系统 32软电话交换机/VOIP/PBX 9邮件列表管理 42大数据 21开源医疗项目 12人力资源管理 15家庭自动化系统 16E ...

  2. 关于标准C语言的预定义宏

    标准C语言预处理要求定义某些对象宏,每个预定义宏的名称一两个下划线字符开头和结尾,这些预定义宏不能被取消定义(#undef)或由编程人员重新定义.下面预定义宏表,被我抄了下来.__LINE__  当前 ...

  3. Remote Desktop Connection Manager 多个远程管理

    http://www.microsoft.com/en-us/download/details.aspx?id=21101 Remote Desktop Connection Manager 多个远程 ...

  4. Scala-的元组和映射

    package com.mengyao.scala.function /** * Scala 映射 * Scala中的Key,Value集合被称为映射,映射中的每一个key,value称为对偶 *   ...

  5. http断点续传原理:http头 Range、Content-Range

    所谓断点续传,也就是要从文件已经下载的地方开始继续下载.在以前版本的 HTTP 协议是不支持断点的,HTTP/1.1 开始就支持了.一般断点下载时才用到 Range 和 Content-Range 实 ...

  6. JAVA 将接口的引用指向实现类的对象

    有一个很简单的例子,java.util中的类ArrayList实现了接口List则生成ArrayList对象时可用以下语句. List list=new ArrayList(); 也就是说所有实现了接 ...

  7. 使用memcached加速web应用实例

    在实际应用中,一般会把数据库查询的结果保存到memcached中,下次訪问数据库时直接从memcached中获取.而不再进行数据库操作,这样非常大的程度上减轻了数据库的负担. [演示样例]: < ...

  8. Python3.2官方文档翻译--继承

    6.5 继承 当然,一门语言特性假设不支持继承那么名称类就失去了价值.子类继承父类的方法例如以下: class DerivedClassName(BaseClassName): <stateme ...

  9. Python进阶之路---1.5python数据类型-字符串

    字符串 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; ...

  10. Windows server 2008系统下FTP服务器的安装

    一.在 Windows 服务器上安装 FTP 服务 1. 在"开始"菜单上,单击"管理工具",然后单击"服务器管理器". 2. 在" ...