对于python的面向对象编程来说, 一切皆对象将现实的抽象事物使用类与实力进行模拟
(1)封装
在面向对象编程中,封装是将数据(属性)和操作这些数据的方法(函数)捆绑在一起,形成一个类的过程。它隐藏了类内部的实现细节,只向外部提供必要的接口来访问和操作数据。
class Person:
def __init__(self, name, age, sex):
self.name = name
self.__age = age
self._sex = sex
def _get_sex(self):
return self._sex
def _set_sex(self, sex):
self._sex = sex
def __get_age(self):
return self.__age
def __set_age(self, age):
self.__age = age
def get_name(self):
return self.name
def set_name(self, name):
self.name = name
def __str__(self):
return f"name:{self.get_name()} age:{self.__get_age()} sex:{self._get_sex()}"
p = Person("张飞", 20, "男")
print(p, p.name, p.get_name())
# print(p.__get_age(),p.__age)
class SuperPerson(Person):
pass
sp1 = SuperPerson("赵云", 52, "男")
print(sp1, sp1._sex)
上述例子来说name是公有属性age是私有属性通过变量前两个下划线定义
sex是保护属性通过一个下划线定义
共有属性在类内类外都可以调用
私有属性只能在类内进行调用
保护属性只能在类内和子类中调用
(2)继承
继承是一种建立类之间关系的机制。通过继承,一个类(称为子类或派生类)可以继承另一个类(称为父类或基类)的属性和方法。这意味着子类可以使用父类中定义的功能,同时还可以添加自己独特的属性和方法。
继承的优势
代码复用:避免重复编写相同的代码,减少代码量。
增强代码的可维护性:如果父类中的方法需要修改,子类会自动继承这些修改。
建立清晰的类层次结构:有助于更好地组织和理解相关的类。
class Animal:
def __init__(self, name):
self.name = name
def sound(self):
print("动物发出声音")
class Dog(Animal):
def __init__(self, name, breed):
super().__init__(name)
self.breed = breed
def sound(self):
print("汪汪汪")
my_dog = Dog("小白", "拉布拉多")
print(my_dog.name)
my_dog.sound()
多继承:
指的是一个子类拥有多个父类,在父类拥有相同方法时进行广度优先查找
class Moveable:
def __init__(self, name, speed):
self.name = name
self.speed = speed
def __str__(self):
return f"名字: {self.name} 速度: {self.speed}"
# def show_move(self):
# print("我是移动类")
class Speakable:
def __init__(self, language):
self.language = language
def __str__(self):
return f"语言:{self.language}"
# def show_speak(self):
# print("我是说话类")
class Dog(Moveable, Speakable):
def __init__(self, name, speed, language):
Moveable.__init__(self, name, speed)
Speakable.__init__(self, language)
def __str__(self):
return f"{Moveable.__str__(self)}{Speakable.__str__(self)}"
def show_dog(self):
print("我是狗类")
class Biting:
def __init__(self, skill):
self.skill = skill
def __str__(self):
return f"我会咬人"
class Japese(Dog, Biting):
def __init__(self, name, speed, language, skill):
Dog.__init__(self, name, speed, language)
Biting.__init__(self, skill)
# def __str__(self):
# return f"小男孩类"
r = Dog("小狗", 180, "英语")
print(r)
t = Japese("gou", 10, "日语", "咬人")
print(t)
t.show_dog()
(3)多态
多态是面向对象编程中的一个重要概念,它指的是不同的对象可以对相同的消息(方法调用)做出不同的响应。
在 Python 中,多态主要通过方法重写(Override)来实现。方法重写是指子类重新定义父类中已有的方法,从而在子类对象调用该方法时,执行的是子类中重写后的方法。
class Animal:
def make_sound(self):
print("动物发出声音")
class Dog(Animal):
def make_sound(self):
print("汪汪汪")
class Cat(Animal):
def make_sound(self):
print("喵喵喵")
# 定义一个函数,接受 Animal 类型的参数
def animal_sound(animal):
animal.make_sound()
# 创建对象
dog = Dog()
cat = Cat()
# 调用函数,传递不同的对象
animal_sound(dog)
animal_sound(cat)
一、什么是面向对象编程?
面向对象编程将数据和对数据的操作封装在一个称为“对象”的单元中。对象具有属性(描述其特征的数据)和方法(对其进行操作的函数)。通过创建类来定义对象的模板,然后可以基于这些类创建多个具体的对象实例。
二、Python 中面向对象编程的关键概念
类(Class):类是对象的蓝图或模板,它定义了对象的属性和方法。
对象(Object):对象是类的实例,具有类中定义的属性和方法。
属性(Attribute):对象的特性或数据。
方法(Method):对象可以执行的操作,是定义在类中的函数。
三、Python 面向对象编程的例子与代码案例
让我们通过一些具体的例子来更好地理解面向对象编程。
定义一个 Person 类来表示人
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def get_name(self):
print(f"我叫{self.name},今年{self.age}岁。")
在这个例子中,Person 是一个类,init 方法是特殊的初始化方法,用于在创建对象时设置对象的初始属性值。introduce 方法用于打印人的介绍信息。
创建 Person 类的对象并使用其方法
person1 = Person("张三", 25)
person2 = Person("李四", 30)
person1.get_name()
person2.get_name()
通过创建 Person 类的对象 person1 和 person2,并调用 introduce 方法,我们可以看到每个对象都具有自己独立的属性值,并能执行相应的操作。
再来看一个 Rectangle(矩形)类的例子
class Rectangle:
def __init__(self, length, width):
self.length = length
self.width = width
def area(self):
return self.length * self.width
def perimeter(self):
return 2 * (self.length + self.width)
这个类用于计算矩形的面积和周长。
rect1 = Rectangle(5, 3)
print("矩形的面积:", rect1.area())
print("矩形的周长:", rect1.perimeter())
通过创建 Rectangle 类的对象 rect1,并调用其 area 和 perimeter 方法,我们可以方便地计算矩形的相关属性。
四、面向对象编程的优势
代码的可重用性:通过创建类,可以在不同的地方创建类的实例,重复使用相同的代码结构和逻辑。
代码的可维护性:将相关的属性和方法封装在一个类中,使得代码更易于理解和修改。
代码的可扩展性:可以轻松地在现有类的基础上创建子类,扩展其功能。
总之,Python 中的面向对象编程为我们提供了一种更高效、更有条理的编程方式,使我们能够构建复杂且易于管理的程序。希望通过上述的例子和讲解,您能对 Python 面向对象编程有更深入的理解和认识,并在实际编程中灵活运用。