代码之家  ›  专栏  ›  技术社区  ›  Ala'a mansour

PYTHON与JAVASCRIPT中的类

  •  2
  • Ala'a mansour  · 技术社区  · 1 周前

    我正在研究这两种语言之间的区别,我想知道为什么我不能在不启动实例的情况下访问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)
    

    运行此代码将返回所有汽车的列表(它们是我创建的实例) [< 主要的 车辆对象位于0x0000022D667664E0>&书信电报; 主要的 .车辆对象位于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中,如果我想获得all的值,我必须使用这样的实例

    console.log(ford.all);

    这将只返回创建的ford实例 [ Car { all: [Circular *1], name: 'ford', miles: 324 } ]

    但在python中,如果我打印出一个实例all,它将返回这个

    print(bmw.all)

    [<__main__.Car object at 0x00000199CAF764E0>, <__main__.Car object at 0x00000199CAF76510>]

    它返回创建的两个实例,即使我调用了all of one实例

    1 回复  |  直到 1 周前
        1
  •  3
  •   Alexander Nenashev    1 周前

    您需要将其声明为静态,否则它是一个实例属性:

    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);

    在Python中,方法外部声明的变量是静态的(没有 static 关键字是必需的)。