返回

JavaScript 与 Python:类与继承之别

前端

正文:

面向对象编程(OOP)是一种广泛应用的编程范式,它以模拟真实世界实体的方式来组织代码。在 JavaScript 和 Python 中,类和继承是 OOP 的重要基础。类是用来创建对象的模板,它定义了对象的属性和方法。继承是一种机制,允许一个类从另一个类中派生,从而复用代码并实现多态性。

概念介绍:

  • :类是一个模板,用于创建对象。它定义了对象的属性和方法。
  • 对象 :对象是类的实例。它具有类的所有属性和方法。
  • 继承 :继承是一种机制,允许一个类从另一个类中派生。子类继承了父类的所有属性和方法,还可以添加自己的属性和方法。

语法比较:

JavaScript

class Person {
  constructor(name) {
    this.name = name;
  }

  greet() {
    console.log(`Hello, my name is ${this.name}.`);
  }
}

class Student extends Person {
  constructor(name, major) {
    super(name);
    this.major = major;
  }

  study() {
    console.log(`${this.name} is studying ${this.major}.`);
  }
}

const person = new Person('John');
person.greet(); // Hello, my name is John.

const student = new Student('Jane', 'Computer Science');
student.greet(); // Hello, my name is Jane.
student.study(); // Jane is studying Computer Science.

Python

class Person:
    def __init__(self, name):
        self.name = name

    def greet(self):
        print(f"Hello, my name is {self.name}.")

class Student(Person):
    def __init__(self, name, major):
        super().__init__(name)
        self.major = major

    def study(self):
        print(f"{self.name} is studying {self.major}.")

person = Person('John')
person.greet() # Hello, my name is John.

student = Student('Jane', 'Computer Science')
student.greet() # Hello, my name is Jane.
student.study() # Jane is studying Computer Science.

实际案例:

以下是一个使用 JavaScript 类和继承来实现简单的银行账户系统的例子:

class Account {
  constructor(name, balance) {
    this.name = name;
    this.balance = balance;
  }

  deposit(amount) {
    this.balance += amount;
  }

  withdraw(amount) {
    if (amount <= this.balance) {
      this.balance -= amount;
      return true;
    } else {
      return false;
    }
  }

  get balance() {
    return this.balance;
  }
}

class CheckingAccount extends Account {
  constructor(name, balance, overdraftLimit) {
    super(name, balance);
    this.overdraftLimit = overdraftLimit;
  }

  withdraw(amount) {
    if (amount <= this.balance) {
      this.balance -= amount;
      return true;
    } else if (amount <= this.balance + this.overdraftLimit) {
      this.balance -= amount;
      this.overdraftLimit -= amount - this.balance;
      return true;
    } else {
      return false;
    }
  }
}

const account = new Account('John Doe', 1000);
account.deposit(500);
account.withdraw(300);
console.log(account.balance); // 1200

const checkingAccount = new CheckingAccount('Jane Smith', 500, 200);
checkingAccount.deposit(500);
checkingAccount.withdraw(800);
console.log(checkingAccount.balance); // 200

总结:

JavaScript 和 Python 中的类和继承机制都提供了强大的面向对象编程能力。两者在概念上非常相似,但在语法和细节上存在一些差异。JavaScript 采用基于原型的继承模型,而 Python 采用基于类的继承模型。JavaScript 的类更像是一种语法糖,而 Python 的类更像是传统意义上的类。总体来说,这两种语言都非常适合 OOP,开发者可以根据自己的喜好和项目的具体要求来选择使用哪种语言。