Otcl

简介

面向对象的脚本语言

类变量和类方法

Otcl的基类称为Object(类的名字,不是面向对象中的“对象”),所以的Otcl类都是从Object派送来的。

直接贴代码,命名为BOX.tcl

#定义“BOX”类
Class BOX
#类的构造函数用init表示;instproc表示这是一个类的方法
#“eval $self next”是显式地调用父类同名(init)方法,这是与C++的一点不同
#同时定义了一个类成员“lenght”,默认为5
BOX instproc init {} {
eval $self next
$self set lenght 5
} #与C++的第二点不同,每个方法都需要重新声明类成员
#“$self instvar lenght ”既用来重新声明lenght变量
BOX instproc incr_lenght {} {
$self instvar lenght
incr lenght
puts "$lenght"
} #类的析构函数用destroy表示,也需要显式地调用父类destroy方法
BOX instproc destroy {} {
puts "GoodBye!"
$self next
}

otclsh简单脚本测试

启动Otclsh:

root@: otclsh
%
#加载上面写的源代码
%source BOX.tcl #创建一个实例
%BOX box1
box #查看BOX类的实例,放回上一步创建的box1
%BOX info instances
box1 #查看box1的变量
%box1 info vars
lenght #查看数值
%box1 set lenght
5 #调用自定义的incr_lenght函数
%box1 incr_lenght
6 #销毁box1对象
% box1 destroy
GoodBye! #再调用函数就显示失败
% box1 incr_lenght
invalid command name "box1"

继承

修改BOX.tcl,增加一个BigBOX类

#定义BigBOX继承BOX
Class BigBOX -superclass BOX #在基类BOX 类的init方法里增加一条输出"This is a BOX"
BigBOX instproc init {} {
eval $self next
puts "this is a BigBOX"
$self set lenght 5
} BigBOX instproc destroy {} {
puts "GoodBye! BigBOX"
$self next
} #重载incr_lenght方法,使其变为乘2,而不是加1
BigBOX instproc incr_lenght {} {
$self instvar lenght
set lenght [expr $lenght*2]
puts "$lenght"
}

OTCL,面向对象的脚本一的更多相关文章

  1. 【循序渐进学Python】7.面向对象的核心——类型(上)

    我们知道Python是一门面向对象的脚本语言.从C#的角度来看:首先Python支持多继承.Python 类型成员通常都是public的,并且所有成员函数都是virtual的(可以直接重写). 1. ...

  2. Octopus系列之如何让前台的js脚本变得灵活重用

    Octopus系列如何让前台的js脚本变得灵活,重用 方式1:ajax方式 方式2:form表单方式 面向对象的脚本封装 jQuery的封装 做Web开发的少不了前台Ajax的使用, 返回true:f ...

  3. 常用脚本语言Perl,Python,Ruby,Javascript一 Perl,Python,Ruby,Javascript

    常用脚本语言Perl,Python,Ruby,Javascript一 Perl,Python,Ruby,Javascript Javascript现阶段还不适合用来做独立开发,它的天下还是在web应用 ...

  4. Perl,Python,Ruby,Javascript 四种脚本语言比较

    Perl 为了选择一个合适的脚本语言学习,今天查了不少有关Perl,Python,Ruby,Javascript的东西,可是发现各大阵营的人都在吹捧自己喜欢的语言,不过最没有争议的应该是Javascr ...

  5. 工控随笔_13_西门子_WinCC的VBS脚本_04_变量类型之二

    上一个随笔说了一些关于vbs变量类型的内容,这一篇我们继续说说变量类型相关的内容. 一.NULL补充内容 '需要注意的是,NULL不能简单通过 = 来进行比较,而必须通过 'IsNull函数来实现 ' ...

  6. 利用ngx_python模块嵌入到Python脚本

    导读 Python是一种计算机程序设计语言.是一种动态的.面向对象的脚本语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的.大型项目的开发. ...

  7. 面向对象之php多态

    php是面向对象的脚本语言,而我们都知道,面向对象的语言具有三大特性:封装,继承,多态(接口的多种不同的实现方式即为多态). 封装是类的构建过程,php具有.php也具有继承的特性.唯独这个多态,ph ...

  8. Python -面向对象(一 基本概念)

    一 Python简单介绍 Python是一个可移植的面向对象的脚本语言. Python尽管是一个脚本语言,但也是一个全然面向对象的语言.由于它设计之初把易用性做为很重要的一个考量标准,所以用起来很简洁 ...

  9. golang 面向对象

    深入理解GO语言的面向对象_Golang_脚本之家 https://www.jb51.net/article/94030.htm 深入理解GO语言的面向对象 更新时间:2016年10月04日 10:4 ...

随机推荐

  1. Dijkstra学习笔记

    暂时空白.... 没有前置,我用vector存图 //存储 struct edge{ int w,to;//w是权值,to是连接到的下一条边 }; vector<edge> e; //连边 ...

  2. PCIE_DMA实例一:xapp1052详细使用说明

    一:前言 很多和我一样初学pcie的硬件工程师都会遇到这样一个问题,看了不少pcie相关的资料,还是搞不清这玩意儿到底该怎么用.于是我们打开ISE的core_generator工具,生成了一个pcie ...

  3. 【转】WCF扩展系列 - 行为扩展(Behaviors)

    原文:https://www.cnblogs.com/Creator/archive/2011/05/21/2052687.html 这个系列的第一部分将会重点关注WCF行为(behaviors),W ...

  4. 学习和使用STL

    STL是一个标准规范,它只是为容器.迭代器和泛型算法等组件定义了一整套统一的上层访问接口及各种组件之间搭配运用的一般规则,而没有定义组件底层的具体实现方法. STL主要包括下面这些组件:I/O流,st ...

  5. windows7下解决caffe check failed registry.count(type) == 1(0 vs. 1) unknown layer type问题

    在Windows7下调用vs2013生成的Caffe静态库时经常会提示Check failed: registry.count(type) == 1 (0 vs. 1) Unknown layer t ...

  6. 使用LINQ的Skip和Take函数分批获取数据

    Skip函数和Take函数是System.Linq对类Enumberable的扩展, 其中Skip函数是跳过序列中的前n个数据,参数为需要跳过的数据量, Take函数是取序列中的n个数据,参数为要获取 ...

  7. floodlight路由机制分析

    SDN的出现可以使得各种复杂的路由协议从原本的Device OS中剥离出来,放在SDN Controller中,Controller用一种简单的协议来和所有的Router进行通信,就可以获得网络拓扑, ...

  8. python 读取csv中的文件,从sftp下载文件

    需要从sftp上下载一些图片文件,文件名存放在一个csv文件中.代码如下: # -*- coding:utf-8 -*- import paramiko import csv import os de ...

  9. 2018年美国大学生数学建模竞赛(MCM/ICM) F题解题思路

    任务一:开发价格点,建立综合定价模型. 其中 a 代表开发价格点系数,代表个人财产评估.K 为 PI 交易系数 以这个进行评估,将个人划分为具有合理相似性的子组: 当 a 等于 0-30 时,子组为: ...

  10. mysql查询当天,前一天,一周,一个月

    当天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天 SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ...