Python、JS、TS、C# 对比

2022-07-22  本文已影响0人  李霖弢
内容\语言 Python JS TS C#
强/弱类型 强类型
不可动态转换
弱类型
可动态转换
弱类型
可动态转换
强类型
不可动态转换
动/静态类型 动态类型
变量可赋值其他类型
动态类型
变量可赋值其他类型
静态类型
变量不可赋值其他类型
静态类型
变量不可赋值其他类型
变量提升
声明关键词 可用varletconst
严格模式下必须使用
必用 varletconst 直接通过数据类型进行声明
相等 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装饰,第一个参数指向类
直接在类中定义,又称原型成员(位于classprototype),可以被类和实例访问
ES7中废弃
无,同ES7
实例成员 * 在方法中通过self定义
* 为实例直接赋值
实例方法第一个参数指向实例
* 在方法中通过this定义
* 为实例直接赋值
* ES7中类中直接定义的属性也为实例属性
实例方法中this指向实例
* 直接在类中定义
* 在方法中通过this定义
* 为实例直接赋值
实例方法中this指向实例
静态成员 通过@staticmethod装饰静态方法(无selfcls参数)
不支持静态属性
通过static修饰
ES6只有静态方法,ES7支持静态属性
静态方法中this指向类
通过static修饰
静态方法中this指向类
私有成员 __开头命名则类似private * 默认为public
* private则不能在类结构之外被访问
* protected类似private,但允许在子类结构内访问
上一篇下一篇

猜你喜欢

热点阅读