python类中函数调用_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):

。。。。。

L3Byb3h5L2h0dHAvaW1hZ2VzLmNuaXRibG9nLmNvbS9ibG9nLzQ2NTQzOC8yMDE1MDEvMDMyMjUyMzk5MTk0OTk0LnBuZw==.jpg

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 ...

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

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

java:内部类与外部类的区别和联系

注意事项一:在内部类中可以随意使用外部类的成员方法以及成员变量. 众所周知,在定义成员方法或者成员变量的时候,可以给其加上一些权限的修饰词,以防止其他类的访问.如在成员变量或者成员方法前面,加上Pri ...

随机推荐

solr的增删改查

solr的配置请查看:http://www.cnblogs.com/byteworld/p/5898651.html 创建Core:(可以复制模版到solrhome\test\conf文件夹中) 简化 ...

ASP.NET Misconfiguration: Debug Information

Abstract: Debugging messages help attackers learn about the system and plan a form of attack. Explan ...

2. Docker - 安装

一.Docker介绍 1. Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上, 也可以实现虚拟化. 容器时完全使用沙 ...

正则表达式之IP地址检验

String ipRegex = "^(\\d|[1-9]\\d|1\\d*|2[0-4]\\d|25[0-5])(\\.\\1){3}$"; /* * \\d|[1-9]\\d| ...

【NOIP2014】Day1题解+代码

Day1 T1 签到题,模拟一下随便写就能过. 不过小心像我一样表打错傻逼的调了10min. #include #include ...

Spring Boot 引入自定义yml

喜欢yml配置文件格式的人性化,也喜欢properties配置文件管理方式的人性化, 那么下面我们就来看一下 yml 是如何配置和使用类似properties管理方式的人性化. 配置文件 设置Spri ...

maven下载源码

能下载到源代码的原则是仓库中打了resource的jar包 1.使用命令 mvn dependency:sources 下载依赖包的源代码. mvn dependency:sources -Ddown ...

hiho 第六周 01背包

简单的01背包,没有报名,这周的没有权限提交 #include #include using namespace std; #defin ...

【转载】关闭XenServer中挂起(hang)虚机的方法

在XenServer中,碰到VM挂起(hang)的情况,也不是那么少见,而VM长时间挂起,那么很影响心情和后续的操作. 一般情况下,为了关闭VM或者重启VM,我们推荐这样的操作顺序: 进入到VM内,使 ...

CSS技巧-文字分散对齐的方法

下面的代码可以在IE中实现文字分散对齐:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值