面向对象是什么:
面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,它以对象为基础,将数据和操作封装在一起以创建可重用的代码模块。在面向对象编程中,对象是程序的基本单元,它们可以代表现实世界中的实体或概念,如人、车、动物等。面向对象编程的主要思想是将现实世界中的事物抽象为对象,并通过对象之间的交互来实现程序的功能。
面向对象编程的核心概念包括:
-
类与对象:类是对象的抽象,描述了具有相似属性和行为的一组对象的共同特征。对象是类的实例,它具体化了类的定义,并拥有类所描述的属性和行为。
-
封装:封装是将数据和操作封装在对象内部的机制,隐藏了对象的内部细节,只对外部提供有限的接口。这样可以保护数据不受非法访问和意外修改,提高了代码的可维护性和可重用性。
-
继承:继承是一种机制,允许一个类(称为子类或派生类)继承另一个类(称为父类或基类)的属性和行为,并可以在此基础上进行扩展或修改。通过继承,可以实现代码的重用和层次化的组织结构。
-
多态:多态是指同一个操作作用于不同的对象上时可以产生不同的行为。在面向对象编程中,多态通过方法的重写(覆盖)和方法的重载来实现。多态提高了代码的灵活性和可扩展性,使得程序更加易于理解和维护。
Python面向对象:
定义类:
类有属性和方法,对应实体的属性和行为,类定义的语法格式:
class ClassName:<element_1>..<element_N><action_1>..<action_N>
例如:
class Person:age = 18name = "Jack"def speak(self):return f'hello I am {self.name}'
Human = Person()
print(Human.speak())
#输出:hello I am Jack
构造方法
类有一个名为 __init__() 的特殊方法,也叫构造方法,类实例化对象时会自动调用这个方法,self指实例化的对象。
例如:
class Person:def __init__(self, name, age):self.age = ageself.name = namedef speak(self):return f"hello I am {self.name}, I'm {self.age} years old"
Human = Person('jack',18)
#输出:hello I am jack, I'm 18 years old
继承
子类可以继承父类的属性和方法,并且在子类中还可以改写父类的属性和方法,子类也可以定义新的方法。
例如:
class Person:def __init__(self, n, a):self.age = aself.name = ndef run(self):return f"{self.name} is running"def speak(self):return f"hello I am {self.name}, I'm {self.age} years old"
class Student(Person):def __init__(self, stuId,n,a):Person.__init__(self,n,a)self.stuId = stuIddef speak(self):return f"hello I am {self.name}, I'm {self.age} years old, my student id is {self.stuId}"
Human = Person('jack',18)
xiaohong = Student("20180001","小红",18)print(xiaohong.speak())
print(xiaohong.run())
#输出如下
#hello I am 小红, I'm 18 years old, my student id is 小红
#小红 is running
私有属性与方法
在类的属性或方法前加上__表示此属性或方法为私有属性与方法,子类无法继承和调用。
例如:
class Person:def __init__(self, n, a, money):self.age = aself.name = nself.__money = moneydef run(self):return f"{self.name} is running"def speak(self):return f"hello I am {self.name}, I'm {self.age} years old"def __spendMoney(self):return f"{self.name} 花了{self.__money}元"
class Student(Person):def __init__(self, stuId, n, a):Person.__init__(self, n, a, 100)self.stuId = stuIddef speak(self):return f"hello I am {self.name}, I'm {self.age} years old, my student id is {self.stuId}"xiaohong = Student("20180001","小红",18)
xiaohong.__spendMoney()#此句报错,无法调用
运算符重载:
Python也可以进行运算符重载,直接调用类的专有方法就可以实现运算符重载。
例如:
class Purse:def __init__(self, a, b):self.money = aself.E_money = bdef __str__(self):return f"{self.money},{self.E_money}"def __add__(self, other):return Purse(self.money+other.money,self.E_money + other.E_money)
Purse1 = Purse(10,20)
Purse2 = Purse(30,40)
print(Purse1 + Purse2)
#输出:40,60