面向对象是什么:
面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,它以对象为基础,将数据和操作封装在一起以创建可重用的代码模块。在面向对象编程中,对象是程序的基本单元,它们可以代表现实世界中的实体或概念,如人、车、动物等。面向对象编程的主要思想是将现实世界中的事物抽象为对象,并通过对象之间的交互来实现程序的功能。
面向对象编程的核心概念包括:
-
类与对象:类是对象的抽象,描述了具有相似属性和行为的一组对象的共同特征。对象是类的实例,它具体化了类的定义,并拥有类所描述的属性和行为。
-
封装:封装是将数据和操作封装在对象内部的机制,隐藏了对象的内部细节,只对外部提供有限的接口。这样可以保护数据不受非法访问和意外修改,提高了代码的可维护性和可重用性。
-
继承:继承是一种机制,允许一个类(称为子类或派生类)继承另一个类(称为父类或基类)的属性和行为,并可以在此基础上进行扩展或修改。通过继承,可以实现代码的重用和层次化的组织结构。
-
多态:多态是指同一个操作作用于不同的对象上时可以产生不同的行为。在面向对象编程中,多态通过方法的重写(覆盖)和方法的重载来实现。多态提高了代码的灵活性和可扩展性,使得程序更加易于理解和维护。
Python面向对象:
定义类:
类有属性和方法,对应实体的属性和行为,类定义的语法格式:
class ClassName:
<element_1>
.
.
<element_N>
<action_1>
.
.
<action_N>
例如:
class Person:
age = 18
name = "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 = age
self.name = name
def 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 = a
self.name = n
def 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 = stuId
def 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 = a
self.name = n
self.__money = money
def 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 = stuId
def 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 = a
self.E_money = b
def __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