博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python中的嵌套类(内部类调用外部类中的方法函数)
阅读量:4887 次
发布时间:2019-06-11

本文共 2906 字,大约阅读时间需要 9 分钟。

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

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

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

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

。。。。。

转载于:https://www.cnblogs.com/aguncn/p/4200113.html

你可能感兴趣的文章
ora-12899解决方法
查看>>
(8)关于flexbox的一些想法。
查看>>
一台机子同时启动两个相同版本的tomcat
查看>>
剑指offer——python【第29题】最小的K个数
查看>>
带你入门代理模式/SpringAop的运行机制
查看>>
eclipse对离线python的环境搭建
查看>>
OpenCV imshow无法显示图片
查看>>
js线程&定时器
查看>>
java.lang.IllegalStateException: getOutputStream() has already been cal
查看>>
Ubuntu下搜狗输入法乱码
查看>>
gson所需jar包
查看>>
最干净的pyinstaller打包成exe应用程序方法
查看>>
Python中的数据类型
查看>>
讲给普通人听的分布式数据存储【转载】
查看>>
vs2008 C# 怎么调试C++ dll[转]
查看>>
PHP的魔术方法
查看>>
警惕麦咖啡的"缓冲区溢出保护"引起的ASP.NET 中 System.OutOfMemoryException 的错误...
查看>>
optimizer_dynamic_sampling
查看>>
HTML(WEB)开发day05
查看>>
序列合并求前K小项 POJ2442
查看>>