- 手头暂时没有C# 环境,以后会补全
内容\语言 | Python | JS | TS | C# |
---|---|---|---|---|
强/弱类型 | 强类型 不可动态转换 |
弱类型 可动态转换 |
弱类型 可动态转换 |
强类型 不可动态转换 |
动/静态类型 | 动态类型 变量可赋值其他类型 |
动态类型 变量可赋值其他类型 |
静态类型 变量不可赋值其他类型 |
静态类型 变量不可赋值其他类型 |
变量提升 | 无 | 有 | 有 | 无 |
声明关键词 | 无 | 可用var 、let 、const 严格模式下必须使用 |
必用 var 、let 、const
|
直接通过数据类型进行声明 |
相等 |
1 != "1" 1 == True 2 == False [] == [] () == () {} == {} (字典) |
1 == "1" 1 == true 2 == false [] != [] {} != {}
|
同JS | |
全等 | is is not |
=== !== |
同JS | |
in |
100 in [100,200] "name" in {"name":"jack"}
|
0 in [100,200] "name" in {"name":"jack"}
|
同JS | |
布尔判断 |
bool([]) is False bool(()) is False bool({}) is False (字典) |
Boolean([]) === true Boolean({}) === true
|
同JS | |
接口 | 无 可通过 .pyi 文件规范数据类型 无 |
通过interface 定义接口 类通过 implements 实现接口,其他通过: 实现 |
||
抽象类 | 通过metaclass=abc.ABCMeta 定义抽象类 通过 @abc.abstractmethod 定义抽象方法 |
无 | 通过abstract 定义抽象类 通过 abstract 定义抽象方法 |
|
类 | 多重继承 | 通过extends 单独继承 |
通过extends 单独继承 |
|
构造函数 |
__init__ 子类隐式通过 super().__init__() 调用父类构造函数(super 详见MRO) |
constructor 子类隐式通过 super() 调用父类构造函数 |
constructor 子类必须显式通过 super() 调用父类构造函数 |
|
类成员 |
类属性可以被类和实例访问 类方法需要用 @classmethod 装饰,第一个参数指向类 |
直接在类中定义,又称原型成员(位于class 的prototype ),可以被类和实例访问 ES7中废弃 |
无,同ES7 | |
实例成员 | * 在方法中通过self 定义 * 为实例直接赋值 实例方法第一个参数指向实例 |
* 在方法中通过this 定义 * 为实例直接赋值 * ES7中类中直接定义的属性也为实例属性 实例方法中 this 指向实例 |
* 直接在类中定义 * 在方法中通过 this 定义 * 为实例直接赋值 实例方法中 this 指向实例 |
|
静态成员 | 通过@staticmethod 装饰静态方法(无self 和cls 参数) 不支持静态属性 |
通过static 修饰 ES6只有静态方法,ES7支持静态属性 静态方法中 this 指向类 |
通过static 修饰 静态方法中 this 指向类 |
|
私有成员 | 以__ 开头命名则类似private
|
无 | * 默认为public * private 则不能在类结构之外被访问 * protected 类似private ,但允许在子类结构内访问 |
网友评论