encoding = utf-8
class Dog:
def __init__(self, weight, color):
self.weight = weight
self.color = color
def bark(self):
print(self.color + "的狗在bark")
def run(self):
print(str(self.weight) + "kg的狗在run")
dog = Dog(10, "白色")
dog.bark() # 把dog传给self
print(dog.color)
print(dog.weight)
bigYellow = Dog(20, "黄色")
bigYellow.bark()
bigYellow.run()
方法第一个参数为self,如果在定义方法时没有self参数,在执行dog.bark(),dog会作为实参传入bark()方法内,若没有self则没有形参来接收dog,程序报错
self:
类似于this,java、C++默认有this,python需显示注明self
当某个对象调用其方法时,python解释器会把这个对象作为第一个参数传给self
同理,当某个对象调用其方法时java、C++编译器会把该对象传给并未显式出现在形参列表的this指针
_init_():
类似于构造函数
class A {
int a;
String b; // java中此处定义成员变量
A (int a, String b){
this.a = a; // 构造函数中调用成员变量
this.b = b;
}
void method_1() {
System.out.println(a); // 方法中也可以调用成员变量、成员方法
method_2(); // 调用时可以直接使用变量名、方法名来调用,不需要显式注明this
}
void method_2() {
...
}
}
class A:
# 因为,python定义变量时不用关键字来确定变量的类型,而且定义的时候必须赋初值,定义和赋初值合二为一
def __init__(self, a, b): # 所以,python定义变量和调用变量二者很相似,更显得自由与随意
self.a = a
self.b = b # 此处,定义成员变量、调用成员变量、合二为一
def method_1():
print(self.a) # 此处,可调用成员变量、成员方法
self.method_2() # 调用时不可以直接使用变量名、方法名来调用,需要显式注明self
def method_2():
pass