首页 > Python资料 博客日记
aardio教程二) 进阶语法
2024-03-17 22:30:02Python资料围观183次
文章aardio教程二) 进阶语法分享给大家,欢迎收藏Python资料网,专注分享技术知识
表(table)
aardio中除了基础数据类型外,其他的复合对象都是table(例如类和名字空间等)。table可以用来存放aardio的任何对象,包括另一个table。
在其他语言中的字典、列表、数组、集合映射等,在aardio中都使用table来实现。
创建字典
import console;
var tab = {
a = 123;
str = "字符串";
[123] = "不符合变量命名规则的键应放在下标内。";
["键 名"] = "不符合变量命名规则的键应放在下标内。";
键名 = {
test = "表也可以包含表";
}
}
// 新版也可以使用类json语法定义
var tab = {
"a": 123,
"str": "字符串",
//123: "不符合变量命名规则的键应放在下标内。" // 这样定义键不能是数值类型
"键名": {"test":"表也可以包含表"}
}
tab.a = 456;
tab["str"] = "aaaa" ;
// 赋值为null等同于删除该键
tab.键名 = null;
// 遍历
for k,v in tab{
console.dump(k,v);
}
console.pause();
创建数组
var array = {1;2;3;"a"};
// 遍历
for(i=1;#array;1){
console.dump(i, array[ i ]);
}
数组和字典可以混用
var t = {
1;
2;
a=2;
}
// #只能获取到数组长度,也就是2
console.log(#t)
// 获取表长度, 3
console.log(table.count(t))
类
使用class关键字定义类。类可以动态创建数据结构相同的table对象
定义类
//定义类
class 类名字{
//构造函数可以省略
ctor( 构造参数列表 ){
//构造函数代码
}
类属性 = "属性值";
类方法 = function(参数){
}
}
和定义一个table的语法基本一样,只是类可以创建出对象
var 对象 = 类名字();
io.print(对象.类属性)
对象.类方法();
类的名字空间
定义类时,默认会创建一个同名的名字空间。赋值给名字空间的变量就是类的公用静态成员
io.open(); //打开控制台窗口
//定义一个类
class cls{
a = 123;
}
//每一个类拥有独立的名字空间,名字空间中的变量也就是类的公用静态成员。
cls.A = "类的静态成员A";
c = cls(); //创建新对象
io.print( "c.a" , c.a ) //显示123
io.print( "cls.A" , cls.A ) //显示"类的静态成员A";
在库代码里可以经常看到,定义类的时候一般会定义一个同名的名字空间,用于存放一些静态函数或变量
class base{
a = 123;
b = 456;
c = 789
}
namespace base{
static = 123; //类的静态成员
}
this对象
也就是Python的self,表示当前对象
owner对象
这个解释起来比较麻烦,但理解了就很简单,举个例子:
class cls{
func = function(){
//类有自已的名字空间,访问全局对象要加上..前缀
..io.print("owner", owner )
..io.print("this", this )
..io.print("owner == this", owner == this )
}
}
//创建对象
obj = cls();
//打开控制台
io.open()
//调用对象方法
obj.func(); //默认table与owner是同一个对象
func = obj.func;
func();//这里owner为null空值,而this对象没有改变
当一个table对象调用成员函数时,默认会传递一个owner对象给函数。而在类创建的对象成员函数里,owner对象与this对象是指向同一个对象。
this对象与owner对象的区别在于: this是类内部指向当前创建对象的指针,this指针不会因为函数的table前缀改变而改变。而owner对象是会根据函数调用时函数名前缀的table对象而相应改变
构造函数
ctor函数就是类的构造函数,等同于__init__
,只是参数没有self
//定义类
class cls{
//使用ctor关键字定义构造函数
ctor( a,b ){
this.a = a;
this.b = b;
}
c = "this.c";
d = "this.d";
}
//调用类的构造函数创建对象
var obj = cls(123,456);
import console;
console.log( obj.a, obj.b )
console.pause();
类的直接继承
//创建一个基类
class base{
a = 123;
b = 456;
c = 789
}
namespace base{
static = 123; //类的静态成员
}
class inheritance{
// 构造函数,三个点表示可变参数,类似Python的*args
ctor(...){
// 在类函数里访问其他名字空间前面都需要加上.., 内核库也要,比如..string.format
this = ..base(...); //调用基类构造对象原型。
};
c = "覆盖基类成员";
d = "子类的新成员";
}
import console;
var obj = inheritance();//从子类创建对象
//输出对象的所有成员(包括直接继承的基类成员)
for(k,v in obj){
console.log(k,v);
}
console.pause();
类的间接继承
class base{
a = 123;
b = 456;
c = 789
}
class inheritance{
c = "覆盖基类成员";
d = "子类的新成员";
// @表示类的元表,名称是随意的
@_prototype;
}
// 在类的名字空间内指定静态共享成员 _prototype
// 可以在元表中定义相应的元方法,来改变类的一些行为,比如_get是访问类属性时触发
inheritance._prototype = { _get = ..base() };
import console;
var obj = inheritance();//从子类创建对象
//与类的直接继承不同
//遍历只能输出子类的所有对象,(不会遍历元表中原型对象的成员)
for(k,v in obj){
console.log(k,v);
}
//通过元方法继承仅在使用成员操作符时生效
console.log("访问base类的成员", obj.a );
console.pause();
类的私有成员
用var定义的成员变量,作用域只在类里面,所以外部无法访问
类的只读成员
用下划线开头的变量为类的只读成员,无法修改它。也可以通过元表来定义只读成员,元表和元方法的时候再具体说
本文由博客一文多发平台 OpenWrite 发布!
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:
相关文章
最新发布
- 【Python】selenium安装+Microsoft Edge驱动器下载配置流程
- Python 中自动打开网页并点击[自动化脚本],Selenium
- Anaconda基础使用
- 【Python】成功解决 TypeError: ‘<‘ not supported between instances of ‘str’ and ‘int’
- manim边学边做--三维的点和线
- CPython是最常用的Python解释器之一,也是Python官方实现。它是用C语言编写的,旨在提供一个高效且易于使用的Python解释器。
- Anaconda安装配置Jupyter(2024最新版)
- Python中读取Excel最快的几种方法!
- Python某城市美食商家爬虫数据可视化分析和推荐查询系统毕业设计论文开题报告
- 如何使用 Python 批量检测和转换 JSONL 文件编码为 UTF-8
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Python与PyTorch的版本对应
- Anaconda版本和Python版本对应关系(持续更新...)
- Python pyinstaller打包exe最完整教程
- Could not build wheels for llama-cpp-python, which is required to install pyproject.toml-based proj