对象系统

badge

可以分配给变量的所有数据。Object 类的属性如下

  • .__repr__: 返回对象的(非丰富)字符串表示
  • .__sizeof__: 返回对象的大小(包括堆分配)
  • .__dir__: 返回对象属性列表
  • .__hash__: 返回对象的哈希值
  • .__getattribute__: 获取并返回对象的属性
  • .clone: 创建并返回一个对象的克隆(在内存中有一个独立的实体)
  • .copy: 返回对象的副本(指向内存中的同一事物)

记录

由记录文字({attr = value; ...})生成的对象 这个对象有基本的方法,比如.clone.__sizeof__

obj = {.x = 1}
assert obj.x == 1

obj2 = {*x; .y = 2}
assert obj2.x == 1 and obj2.y == 2

属性

与对象关联的对象。特别是,将 self (self) 作为其隐式第一个参数的子例程属性称为方法

# 请注意,private_attr 中没有`.`
record = {.public_attr = j; private_attr = 2; .method = self -> self.i + 1}
record. public_attr == 2
record.private_attr # AttributeError: private_attr 是私有的
assert record.method() == 3

元素

属于特定类型的对象(例如,"1"是"Int"类型的元素)。所有对象至少是{=}类型的元素 类的元素有时称为实例

子程序

表示作为函数或过程(包括方法)实例的对象。代表子程序的类是"子程序" 实现 .__call__ 的对象通常称为 Callable

可调用

一个实现.__call__的对象。它也是 Subroutine 的父类

类型

定义需求属性并使对象通用化的对象 主要有两种类型: 多态类型和单态类型。典型的单态类型有IntStr等,多态类型有Option Int[Int; 3]等 此外,定义改变对象状态的方法的类型称为 Mutable 类型,需要在变量属性中添加 !(例如动态数组: [T; !_])

班级

具有 .__new__.__init__ 方法等的类型。实现基于类的面向对象

功能

对外部变量(不包括静态变量)有读权限但对外部变量没有读/写权限的子程序。换句话说,它没有外部副作用 Erg 函数的定义与 Python 的不同,因为它们不允许副作用

程序

它对外部变量具有读取和"自我"权限,对静态变量具有读/写权限,并允许使用所有子例程。它可能有外部副作用

方法

隐式将"self"作为第一个参数的子例程。它与简单的函数/过程是不同的类型

实体

不是子例程和类型的对象 单态实体(1"a" 等)也称为值对象,多态实体([1, 2, 3], {"a": 1})也称为容器对象