python类及三大特性

python三大特性:封装,继承,多态

掌握三大特性:封装(打包属性方法)→ 继承(复用代码)→ 多态(灵活适配)

一、封装:

1、封装:类将属性和方法封装成私有属性和私有方法,使得类外无法直接更改私有属性,也无法调用私有方法,这就是类的封装性。

封装的优点:

(1)封装数据可以很好的保护隐私、

(2)封装方法主要原因是隔离复杂度

(3)封装提高了代码的复用性

(4)隐藏对象的属性和实现细节,提供公共方法对其访问

类的访问权限:

类的属性按访问权限分成:

  • 私有(private)属性:只能在类内访问的属性,确保类内属性的安全,命名方式双下划线开头,比如__var,如果在类内部方法中访问私有属性,应该加上self,如self.__var
  • 保护(protect)属性:能够被类内和子类访问的属性,命名方式单下划线开头,比如_var。
  • 公有(public)属性:能够被类外部访问的属性, 命名方式和普通方式一样字母开头。

方法也有私有方法,命名方式也是双下划线开头,__fun(),如果在类内部访问私有方法,应该加上self,如self.__fun()

下面通过例子来了解类的权限.

class Pople():
    def __init__(self,name,Occ = "篮球运动员"):
        self.__name = name          # 私有的实例属性
        self.Occ = Occ              #实例属性

    def __getOcc(self):             #私有方法
        return self.Occ
    def setname(self,newname):      #实例方法
        self.__name = newname
    def getname(self):
        #print(f"性别:{self.__getOcc()}")
        return self.__name
    def print_info(self):
        print(f"{self.getname() }是位{self.__getOcc()}")  #访问私有方法

if __name__ == "__main__":
    P = Pople("James")                  # 绑定到一个实例到对象.
    print(f"打印出实例属性: {P.Occ}")      # 公用属性可以打印
    #print(P.__name)                    #私有属性只能在类内部调用,打印会报错
    #P.__getOcc()                       #私有方法只能内部调用.
    P.setname('库里')                    #修改实例方法
    #print(P.getname())
    P.print_info()                      # 打印方法

👉 新手注意:

  • • class 是关键字,用来定义“类”(对象的模板)
  • • __init__ 是初始化方法,第一个参数永远是 self(代表对象本身)
  • • self.属性名 用来定义对象的属性,只能在对象内部用

二、继承:站在“巨人肩膀”上写代码

继承就是“子对象”继承“父对象”的属性和方法 ,还能自己加新功能,不用重复写父对象的代码。

新类可以继承父类的公用属性和共有方法,但是不能继承父类的私有属性和私有方法.

继承的作用:使得子类能够拥有父类的属性和方法,以达到复用的目的。

#!/usr/bin/env python
#coding:utf-8

# 父类:动物(包含所有动物的通用属性和方法)
class Animal:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def eat(self):
        print(f"{self.name}在吃饭~")
    def speak(self):
        print(f"{self.name}在叫~")

# 子类:猫(继承Animal,自动拥有name、age属性和eat方法)
class Cat(Animal):
    # 新增子类特有的属性
    def __init__(self, name, age, color):
        # 调用父类的初始化方法,继承name和age
        super().__init__(name, age)
        self.color = color  # 猫特有的属性:颜色
# 重写父类的speak方法(自定义猫的叫声) def speak(self): print(f
"{self.name}({self.color})喵喵叫~") # 新增猫特有的方法 def catch_mouse(self): print(f"{self.name}抓老鼠啦!") # 子类:狗(继承Animal) class Dog(Animal): def __init__(self, name, age, breed): super().__init__(name, age) self.breed = breed # 狗特有的属性:品种 # 重写父类的speak方法 def speak(self): print(f"{self.name}({self.breed})汪汪叫~") # 狗特有的方法 def shake_tail(self): print(f"{self.name}摇尾巴卖萌~") # 创建子类对象并使用 my_cat = Cat("咪咪", 2, "橘色") my_dog = Dog("旺财", 3, "金毛") my_cat.eat() # 继承父类的方法:咪咪在吃饭~ my_cat.speak() # 重写后的方法:咪咪(橘色)喵喵叫~ my_dog.shake_tail() # 子类特有方法:旺财摇尾巴卖萌~

👉 新手重点:

  • • 子类定义时,括号里写父类名(class 子类名(父类名)
  • • super().__init__() 用来调用父类的初始化方法,继承属性
  • • 子类可以重写父类的方法(同名方法覆盖父类),也能加新方法

3. 多态:同一操作,不同表现

多态就是“同一个方法,不同对象调用时表现不一样” ,不用写多个判断,就能让代码适配不同对象。

比如上面的例子:同样调用 speak() 方法,猫会喵喵叫,狗会汪汪叫——这就是多态,不用判断“这是猫还是狗”,直接调用就行。

🌰 代码示例:多态的实际用途

# 定义一个通用函数,接收任意Animal子类对象
def make_animal_speak(animal):
    animal.speak()  # 同一操作,不同对象表现不同

# 创建不同对象
cat = Cat("咪咪", 2, "橘色")
dog = Dog("旺财", 3, "金毛")

# 调用同一个函数,自动适配不同对象
make_animal_speak(cat)  # 输出:咪咪(橘色)喵喵叫~
make_animal_speak(dog)  # 输出:旺财(金毛)汪汪叫~

多态让代码更灵活,以后新增“兔子”“鸟”等子类,不用改 make_animal_speak 函数,直接调用就行~

实操:用面向对象写一个“宠物管理系统”

整合三大特性,写一个简单的宠物管理系统,能添加猫和狗,让它们各自“说话”,联系类的写法及应用.

#!/usr/bin/env python
#coding:utf-8

# 父类:动物
class Animal:
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def speak(self):
        pass
# 子类:猫
class Cat(Animal):
    def __init__(self,name,age,color):
        super().__init__(name,age)
        self.color = color

    def speak(self):
        return f"{self.name} {self.color},{self.age} 岁,喵喵叫!"

# 子类:狗
class Dog(Animal):
    def __init__(self,name,age,breed):
        super().__init__(name,age)
        self.breed = breed      # 定义狗的品种

    def speak(self):
        return f"{self.name}({self.breed},{self.age}岁)汪汪叫~"

#实例化对象
# cat = Cat('小橘','3','橘色')
# dog = Dog("二哈",'5',"白色")
#
# print(cat.speak())
# print(dog.speak())

# 宠物管理系统(主类)
class PetSystem:
    def __init__(self):
        self.pets = []      # 存储所有宠物对象

    def add_pet(self,pet):
        self.pets.append(pet)
        print(f"成功添加宠物: {pet.name},{pet.age}岁")

    # 让所有宠物说话
    def all_pets_speak(self):
        print("\n所有宠物的叫声:")
        for pet in self.pets:
            print(pet.speak())

if __name__ == "__main__":
    # 实例化对象
    cat = Cat('小橘','3','橘色')
    dog = Dog("二哈",'5',"白色")
    pet_system = PetSystem()
    pet_system.add_pet(Cat("咪咪", 2, "橘色"))
    pet_system.add_pet(dog)
    pet_system.all_pets_speak()

 

参考文档:https://mp.weixin.qq.com/s/xnC2MbfBsMye0VmCX2gSyQ

 

posted @ 2025-11-13 15:42  梦徒  阅读(13)  评论(0)    收藏  举报