下面是 "Python3中类的继承以及self和super的区别详解" 的完整攻略。
类的继承
在Python3中,类的继承是通过在类定义时指定父类实现的,例如:
class Animal:
def __init__(self, name):
self.name = name
class Dog(Animal):
def __init__(self, name, breed):
super().__init__(name)
self.breed = breed
dog = Dog("Tommy", "Poodle")
print(dog.name) # 输出 "Tommy"
print(dog.breed) # 输出 "Poodle"
在这个例子中,Dog
类继承了 Animal
类。注意到 Dog
类中的 __init__()
方法重写了父类的方法,但是我们还是调用了父类的初始化方法,这可以通过 super().__init__(name)
访问来实现。这样子,子类就可以继承父类的属性了。
self
在Python中,self
表示实例对象本身。在类中的方法中,self
必须是第一个参数,它指向类的实例本身。
例如,下面这个例子中的 speak()
方法中访问了实例变量 name
,需要通过 self.name
来获取该变量的值:
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
print("My name is", self.name)
dog = Animal("Tommy")
dog.speak() # 输出 "My name is Tommy"
一般情况下,我们定义的类方法都需要先传入 self(即类的实例对象),然后再进行一定的操作。
super
super()
函数返回一个用于访问父类的对象,该对象可以用于调用父类的方法和属性。
在子类中,我们可以通过 super()
调用父类的方法:
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
print("My name is", self.name)
class Dog(Animal):
def __init__(self, name, breed):
super().__init__(name)
self.breed = breed
def speak(self):
super().speak()
print("I am a", self.breed)
dog = Dog("Tommy", "Poodle")
dog.speak() # 输出 "My name is Tommy" 和 "I am a Poodle"
在这个例子中,我们定义了 Dog
类,继承了 Animal
类。我们对 Dog
类定制化了 speak()
方法,不过在这个方法中,我们调用了父类的 speak()
方法,使用 super().speak()
来访问。
这里的 super()
相当于一个连接点,将父类和子类连接起来,通过 super()
可以访问到父类的属性和方法。
示例说明
为了更好地说明上述概念,我们可以看下面这个例子:
class Vehicle:
def __init__(self, name):
self.name = name
self.speed = 0
def start(self):
self.speed = 10
print(self.name, "starts running at a speed of", self.speed, "km/h")
def stop(self):
self.speed = 0
print(self.name, "has stopped")
class Car(Vehicle):
def __init__(self, name):
super().__init__(name)
self.wheels = 4
def start(self):
super().start()
print("It has", self.wheels, "wheels")
car = Car("BWM")
car.start() # 输出 "BWM starts running at a speed of 10 km/h \nIt has 4 wheels"
car.stop() # 输出 "BWM has stopped"
在上述例子中,我们已经定义了一个 Vehicle
类和一个 Car
类。Car
类继承了 Vehicle
类,并重写了 start()
方法。而在 Car
类的 start()
方法中,我们通过 super()
调用了父类的 start()
方法,以便保留父类的功能。
我们再看下一个例子:
class A:
def __init__(self):
self.x = 1
def speak(self):
print("I'm A")
class B(A):
def __init__(self):
super().__init__()
def speak(self):
super().speak()
print("I'm B")
b = B()
b.speak() # 输出 "I'm A \nI'm B"
在这个例子中我们创建了 A
类和 B
类,B
类继承了 A
类,我们在 B
类中的 speak()
方法通过使用 super()
调用了 A
类中的 speak()
方法,以便在 B
类自带的方法中保留父类的功能。
以上就是 "Python3中类的继承以及self和super的区别详解" 的攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python3中类的继承以及self和super的区别详解 - Python技术站