python中的嵌套类(内部类调用外部类中的方法函数)
在为书中版本是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):
。。。。。
python中的嵌套类(内部类调用外部类中的方法函数)的更多相关文章
- Python内部类,内部类调用外部类属性,方法
一 Python中内部类 典型定义: class MyOuter: age=18 def __init__(self,name): self.name=name class MyInner: def ...
- Java嵌套类,内部类和外部类
1.嵌套类,内部类 嵌套类是指被定义在一个类内部的类: JAVA的嵌套类有很多种类:1.静态成员类:2.非静态成员类:3.匿名类:4.局部类:其中,除了静态成员类之外,其他的都是内部类,因为静态成员类 ...
- “全栈2019”Java第八十二章:嵌套接口能否访问外部类中的成员?
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- Java调用外部类定义的方法(Static与无Static两种)
首先定义方法 public class Dy { public int Add(int x,int y){ //定义Add(),该方法没有被static修饰 return x+y; } public ...
- 【转】C++之内部类(嵌套类)与外部类及友元
[转]http://baike.baidu.com/link?url=Md223wQoT5s-3cZ5xRnj1pGmvm310DKAuh-HDrcEdc2l24rwobHrdEc_Mi4Z3BGP0 ...
- Java内部类引用外部类中的局部变量为何必须是final问题解析
今天编写一个多线程程序,发现在方法内定义内部类时,如果内部类调用了方法中的变量,那么该变量必须申明为final类型,百思不得其解,后来想到应该是生命周期的原因,因为方法内定义的变量是局部变量,离开该方 ...
- C++之内部类(嵌套类)与外部类及友元
本人能力.精力有限,所言所感都基于自身的实践和有限的阅读.查阅,如有错误,欢迎拍砖,敬请赐教——博客园:钱智慧. 先上代码: class Outer { public: Outer(){m_outer ...
- kotlin中的嵌套类与内部类
Java中的内部类和静态内部类在Java中内部类简言之就是在一个类的内部定义的另一个类.当然在如果这个内部类被static修饰符修饰,那就是一个静态内部类.关于内部类 和静态内部类除了修饰符的区别之外 ...
- C++嵌套类(内部类与外部类)
在一个类中定义的类被称为嵌套类,定义嵌套类的类被称为外部类.; //不能访问 mytest::i = 10;//不能访问 } private: class mytest { int i; int j; ...
随机推荐
- IBM Cognos 10 启动报错
报错信息: 15:35:02, 'LogService', 'StartService', 'Success'. 15:35:03, CAF input validation enabled. 15: ...
- 2015第24周五Spring的AOP
AOP(面向方面编程:Aspect Oriented Programing)和IoC一样是Spring容器的内核,声明式事务的功能在此基础上开花结果.但AOP的应用场合是受限的,它一般只适合于那些具有 ...
- openstacks
- hadoop2.2.0 MapReduce求和并排序
javabean必须实现WritableComparable接口,并实现该接口的序列化,反序列话和比较方法 package com.my.hadoop.mapreduce.sort; import j ...
- JDBC远程从一个MySql数据库中的一张表里面读出数据(这个数据库需要用SSH隧道连接,大约8W条数据),然后分别插入到另一个数据库中的两张表里
package com.eeepay.lzj.db; import java.sql.Connection; import java.sql.Date; import java.sql.DriverM ...
- 【ArcGIS 10.2新特性】地理数据(Geodatabase 和database)10.2 新特性
1. 大数据支持 ArcGIS与Hadoop集成,将提供一个开源的工具包用于大数据的空间分析,开发者将通过该工具包构建定制化的工作流并在ArcGIS当中执行. 支持更多的大数据平台数据 ...
- ListView OnItemClickListener position 索引不正确
在使用ListView添加如下代码时 listview.setOnItemClickListener(new OnItemClickListener() { @Override public void ...
- UVA 714 Copying Books 最大值最小化问题 (贪心 + 二分)
Copying Books Before the invention of book-printing, it was very hard to make a copy of a book. A ...
- Java和C++的不同
现在一边继续深入C++,一边学习Java,为了学习得更加透彻,不断比较两者之间的不同,以后会慢慢继续增加. 1.在多态的实现上,C++需要利用关键字virtual,而Java不需要,因为在Java中, ...
- MVC实现类似QQ的网页聊天功能-Ajax(上)
说到QQ聊天,程序员首先想到的就是如何实现长连接,及时的接收并回馈信息.那么首先想到的就是Ajax,Ajax的运行机制是通过XMLHttpRequest向服务器发出异步请求,并接受数据,这样就可以实现 ...