面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它将对象作为程序的基本单元,将数据和操作封装在对象中。Python是一种非常适合进行面向对象编程的语言,其支持类和对象的概念,以及继承和多态等面向对象的特性。
在Python中,类(Class)是创建对象的模板或蓝图,定义了一组属性(变量)和方法(函数)。对象(Object)是类的实例,具有类定义的属性和方法。
在这一篇文章中我们将学两个新概念,一个是类,一个是实例化对象。那么大家肯定会问什么事类,什么又是实例化对象呢?我就简单的给大家介绍一下。
类和实例化对象其实很好理解的,在这里我给大家举一个例子,我们可以把类当成一个汽车模型,我们用一个汽车模型可以生产许多个与它一样的汽车,即一个模板生成许多个实实在在的汽车,这些实实在在的汽车呢就是这个实例化对象,而类呢,就像是这个汽车模板,照着类里面的规则,我们可以写出许许多多个程序,合理的运用类会减少我们的工作量,提高我们的工作效率,减少不必要的成本和时间。
下面是一个简单的Python类的示例:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def say_hello(self):
print(f"Hello, my name is {self.name} and I am {self.age} years old.")
这个类定义了一个名为Person的类,具有两个属性:name和age,以及一个方法:say_hello。在类的定义中,__init__方法是一个特殊的方法,称为构造函数(也被称为初始化函数),它在创建对象时被自动调用。self参数(也可以理解为李明为什么是李明,是一种身份的证明,只有使用self参数才能把name传参进去,self可以理解为当前本身的意思,self.name也就是当前的名字)表示类的实例本身,可以在类的方法中使用来访问对象的属性和调用其他方法。
我强调一下第二段代码,也就是初始化函数,只要在这个函数下面的代码都会自动调用,不需要我们手动调用,self对象的作用域可以理解为全局的,实例化对象后就可以把实例化的参数传进来,然后自动调用传给其它有需要的函数
要创建一个Person对象并调用其方法,可以像这样编写代码:
person1 = Person("Alice", 25)
person1.say_hello() # 输出:Hello, my name is Alice and I am 25 years old.
在上面的代码中,我们创建了一个名为person1的Person对象,并调用了其say_hello方法。这个方法使用对象的name和age属性来输出一条问候语。第一段代码就是实例化对象,把实例化的name和age两个参数传进了类中,第二段代码就是调用类中的方法,参数是不固定的,能一直变化,但根还是那个根。
下面是给类起名的建议
在Python中,类名需要遵循以下要求:
在Python中,类的继承是通过创建一个新类并继承另一个类的属性和方法来实现的。通过继承,子类可以继承父类的属性和方法,并且可以添加或覆盖它们。
要创建一个继承自另一个类的子类,可以使用冒号(:)和父类名称来指定继承关系。例如:
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
pass
class Dog(Animal):
def speak(self):
return "Woof!"
?在上面的例子中,Dog类继承自Animal类。这意味着Dog类继承了Animal类的所有属性和方法,并且可以添加或覆盖它们。在Dog类中,我们覆盖了Animal类的speak方法,使其返回字符串"Woof!"。
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
pass
class Dog(Animal):
def speak(self):
super().speak() # 调用父类的speak方法
return "Woof!"
在上面的例子中,我们在Dog类的speak方法中调用了父类的speak方法。通过这种方式,我们可以访问父类的属性和方法,同时也可以添加或覆盖它们。
在Python中,一个类可以有多个父类,这就是多继承。要实现多继承,可以在类定义时使用逗号分隔多个父类。例如:
class Parent1:
pass
class Parent2:
pass
class Child(Parent1, Parent2):
pass
在上面的例子中,Child类继承自Parent1和Parent2两个父类。这意味着Child类将继承Parent1和Parent2两个父类的所有属性和方法。
当一个类继承多个父类时,可能会出现方法覆盖的情况。在这种情况下,子类的方法将覆盖所有父类中同名的方法。要调用父类的方法,可以使用super()函数来获取父类的实例,并调用相应的方法。例如:
class Parent1:
def speak(self):
return "Hello from Parent1"
class Parent2:
def speak(self):
return "Hello from Parent2"
class Child(Parent1, Parent2):
def speak(self):
super().speak() # 调用父类的speak方法
return "Hello from Child"
在上面的例子中,Child类覆盖了Parent1和Parent2两个父类的speak方法。在Child类的speak方法中,我们首先调用了父类的speak方法,然后返回自己的字符串。这样就可以保证在子类中正确地调用父类的方法,并且可以添加或覆盖它们。
print('类名'.mro()),这个是查看类的继承顺序的代码
print(Child.__base__),查看当前类继承的第一个类
最后呢还是感谢大家的支持!