python 第十六章 面向对象三大特征—封装

92 阅读2分钟

大家好我是程序员_蓝天, 本文是为了方便初学者能够快速学习python,写的可能不是很好,希望大家多多包涵。 每个赞都是我前进的动力

二,封装

面向对象的三大特征:封装,继承,多态

封装:把功能代码,数据,封装到某个地方,需要使用的时候进行调用,提高程序的安全性

就是把属性以及方法放到类中,通过类来操作数据或者是调用功能

通过封装,可以将一些不想给用户看到功能进行影藏,用户只能访问我们公开的功能,这样提高了数据的安全性,也对后期的维护降低了成本

好处:便于分工,便于复用,可扩展性强


class Dog:
    """
    类文档
    这个类的说明,用法,或者是方法有哪些
    """
    name = "哈士奇"
    sex = '母'
    def __init__(self, name, age, weight):
        self.name = name
        self.age = age
        self.weight = weight


    def sleep(self):
        print(f'{self.name}在睡觉')

    def run(self):
        print(f"{self.name},奔跑过来")

erha = Dog('二哈', 1.5, 30)
print(erha.name)
print(erha.weight)
erha.sleep()
erha.run()
print(erha.__dict__)
# 获取类文档
print(Dog.__doc__)

私有属性,私有方法

私有---》隐藏

在类中定义一些数据或者功能不希望被外部访问或者操作的时候,可以将数据或者功能进行隐藏

将属性或者方法名前面加上两个下划线, 隐藏属性只能在类里面进行访问

Python中没有绝对的隐藏,使用一些技巧就可以访问


class People:
    def __init__(self,name, age):
        self.name = name
        # __age 变成了 私有属性
        self.__age = age

    def __eat(self):
        print("你好蓝天")

wx = People('蓝天',18)
# print(wx.name)
# print(wx.__age)

# print(wx.__dict__)

# 访问隐藏属性或者方法
# 对象名._类名__属性名/方法名
# print(wx._People__age)

# wx.__eat()
# wx._People__eat()
class Diner:
    def __get(self):
        print('取餐')
        
    def __set(self):
        print('点餐')
    # 通过另外一个方法进行访问,而不是直接访问方法
    def food(self):
        self.__get()
        self.__set()
        
d = Diner()
d.food()

@property

可以让方法可以像属性一样调用

@property 装饰的方法是获取属性值的方法, 被装饰方法的名称会被作为属性名,跟隐藏属性名一致
@属性名.setter 装饰的方法是设置属性值的方法
@属性名.deleter 装饰的方法是删除属性值的方法
# class A:
#     def __init__(self, age):
#         self.__age = age
#
#     @property
#     def age(self):
#         return self.__age
#
#     @age.setter
#     def age(self, age):
#         self.__age = age
#         # print(self.__age)
#
#     @age.deleter
#     def age(self):
#         print("删除》》》age")
#         del self.__age
#
# a = A(12)
# print(a.age)  # 获取
#
# # 设置age
# a.age = 123
# print(a.age)
#
# # 删除age
# del a.age




class A:
    def __init__(self, age):
        self.__age = age


    def get_age(self):
        return self.__age

    # @age.setter
    def set_age(self, age):
        self.__age = age
        # print(self.__age)
    #
    # @age.deleter
    def del_age(self):
        print("删除》》》age")
        del self.__age

a = A(12)
print(a.get_age())  # 获取

# 设置age
a.set_age(123)  # 设置
print(a.get_age())  # 获取
#
# # 删除age
a.del_age()