一点小感悟
今天复习 JavaScript 中的类和继承,顺带着也看了看 Python 中的相关内容。
把两种语言放在一起,通过对比的角度去看,发现不仅没把两者弄混淆,反而把结构记得更清楚了,或许这也是一种另类的学习方法?
另外仔细对比 this 和 self,或许理解会更深一些;
先看 JavaScript 中的类和继承:
JavaScript中的类和继承
类
class Dog{
constructor(name,age){
this.name = name
this.age = age
}
bark(){
console.log(this.name + "说:汪汪汪");
}
}
let dog1 = new Dog('小黑',2)
console.log('这只狗的名字叫' + dog1.name + ',它今年' + dog1.age + '岁了');
//这只狗的名字叫小黑,它今年2岁了
dog1.bark()
//小黑说:汪汪汪
继承
class Huskie extends Dog{
constructor(name,age,type){
super(name,age)
this.type = type
}
skill(){
console.log(this.name + '开始拆家了');
}
}
let dog2 = new Huskie('二狗子',3,'哈士奇')
console.log('这只狗的名字叫' + dog2.name + ',它今年' + dog2.age + '岁了');
//这只狗的名字叫二狗子,它今年3岁了
console.log('这只狗的品种是'+ dog2.type);
//这只狗的品种是哈士奇
dog2.skill()
//二狗子开始拆家了
这里的type也可以提前设定好种类:
class Huskie extends Dog{
constructor(name,age){ //注意这里type没了
super(name,age)
this.type = '哈士奇'
}
skill(){
console.log(this.name + '开始拆家了');
}
}
let dog2 = new Huskie('二狗子',3) //这里不用自己手动填写种类了
console.log('这只狗的名字叫' + dog2.name + ',它今年' + dog2.age + '岁了');
//这只狗的名字叫二狗子,它今年3岁了
console.log('这只狗的品种是'+ dog2.type);
//这只狗的品种是哈士奇
dog2.skill()
//二狗子开始拆家了
Python中的类和继承
类
class Dog():
def __init__(self,name,age):
self.name = name
self.age = age
def bark(self):
print(self.name + '说:汪汪汪')
dog1 = Dog('小黄',2)
print('这条狗叫' + dog1.name + ',它今年' + str(dog1.age) + '岁了')
# 这条狗叫小黄,它今年2岁了
dog1.bark()
# 小黄说:汪汪汪
继承
class Huskie(Dog):
def __init__(self, name, age, type):
super().__init__(name,age)
self.type = type
def skill(self):
print(self.name + '开始拆家了')
dog2 = Huskie('二狗子',2,'哈士奇')
print('这条狗叫' + dog2.name + ',它今年' + str(dog2.age) + '岁了')
# 这条狗叫二哈,它今年2岁了
print('这条狗的品种是' + dog2.type)
# 这条狗的品种是哈士奇
dog2.skill()
# 二狗子开始拆家了
同样这里的type也可以在构造方法里就设定好值,省的自己后面再手动加:
class Huskie(Dog):
def __init__(self, name, age):
# 注意上面的type不在参数里了
super().__init__(name,age)
self.type = '哈士奇'
def skill(self):
print(self.name + '开始拆家了')
dog2 = Huskie('二狗子',2)
# 这里也不用手动填写种类了
print('这条狗叫' + dog2.name + ',它今年' + str(dog2.age) + '岁了')
# 这条狗叫二哈,它今年2岁了
print('这条狗的品种是' + dog2.type)
# 这条狗的品种是哈士奇
dog2.skill()
# 二狗子开始拆家了
用英语来理解super
super,特大的,超级的;
把父类看成老子,把要继承父类的类看成儿子,谁大?
肯定是父类大,儿子可以直接用老子的东西,省的自己再去搞了;
this 和 self
this 和 self 都是用来访问实例对象的属性和方法的,但是两种语言采用是不同的方法;Python里需要显性的自己写出来,而JavaScript不用;
如果仅从这个角度看的话,个人觉得 JavaScript 要比 Python 要简洁一丢丢;