對象系統
可以分配給變量的所有數據。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
的父類
類型
定義需求屬性并使對象通用化的對象
主要有兩種類型: 多態類型和單態類型。典型的單態類型有Int
、Str
等,多態類型有Option Int
、[Int; 3]
等
此外,定義改變對象狀態的方法的類型稱為 Mutable 類型,需要在變量屬性中添加 !
(例如動態數組: [T; !_]
)
班級
具有 .__new__
、.__init__
方法等的類型。實現基于類的面向對象
功能
對外部變量(不包括靜態變量)有讀權限但對外部變量沒有讀/寫權限的子程序。換句話說,它沒有外部副作用 Erg 函數的定義與 Python 的不同,因為它們不允許副作用
程序
它對外部變量具有讀取和"自我"權限,對靜態變量具有讀/寫權限,并允許使用所有子例程。它可能有外部副作用
方法
隱式將"self"作為第一個參數的子例程。它與簡單的函數/過程是不同的類型
實體
不是子例程和類型的對象
單態實體(1
、"a"
等)也稱為值對象,多態實體([1, 2, 3], {"a": 1}
)也稱為容器對象