我正在研究这两种语言之间的区别,我想知道为什么我无法在不启动实例的情况下访问 javascript 类中的变量,但我可以在 python 中做到这一点
这是我们正在讨论的一个例子:
Python 类
class Car:
all =[]
def __init__(self, name):
self.name = name
Car.all.append(self)
def get_car_name(self):
return self.name
bmw = Car("BMW")
mercedez = Car("MERCEDEZ")
print(Car.all)
运行此代码会返回所有汽车的列表(这是我创建的实例) [<main.汽车对象位于0x0000022D667664E0>,<main.汽车对象位于0x0000022D66766510>]
JAVASCRIPT类
class Car {
all = [];
constructor(name, miles) {
this.name = name;
this.miles = miles;
this.all.push(this);
}
}
let ford = new Car("ford", 324);
let tesla = new Car("tesla", 3433);
console.log(Car.all);
如果我使用此代码,console.log 将返回 未定义
在javascript中,如果我想获得所有的值,我必须使用这样的实例
console.log(ford.all);
这将仅返回创建的 ford 实例
[ Car { all: [Circular *1], name: 'ford', miles: 324 } ]
但是在Python中,如果我打印出一个实例,它会返回this
print(bmw.all)
[<__main__.Car object at 0x00000199CAF764E0>, <__main__.Car object at 0x00000199CAF76510>]
即使我调用了一个实例的全部,它也会返回创建的两个实例
您需要将其声明为静态:
class Car {
static all = [];
constructor(name, miles) {
this.name = name;
this.miles = miles;
Car.all.push(this);
}
}
let ford = new Car("ford", 324);
let tesla = new Car("tesla", 3433);
console.log(Car.all);