面相对象编程 扩充之封装、访问机制、 property

时间:2019-11-27
本文章向大家介绍面相对象编程 扩充之封装、访问机制、 property ,主要包括面相对象编程 扩充之封装、访问机制、 property 使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

封装:

封装指的是可以将一堆属性和方法,封装到对象中

ps : 对象就好比一个 “袋子/容器”, 可以存放一堆属性和方法

ps : 存不是目的,目的是为了取,可以通过“对象” d的方式获取属性或方法

为什么要封装:

可以通过“对象”的方式 “存放/获取” 属性或方法

对象拥有 "." 的机制

方便数据的存取

如何封装:

class User:
    x = 10
    def func()
    	pass
obj = User
obj.y = 20 
obj ---> x, func, y 

  

访问机制:

什么是访问机制:

凡是在类内部定义的属性或方法

以__ 开头的属性或方法,都会被限制,外部不能 "直接访问" 该属性原型

PS:看着像该属性或方法隐藏起来了

#python 特有的:

凡是在类内部定义__ 开头的属性或方法,都会变成——类名—— 属性/方法

为什么要用访问机制:

可以对一些隐私信息进行保护

如何实现:

class User:
    __name = 'tank'  # __name 变形为--> __类名__name  
    def _run(self):
        print('sean is running...')

property

property :一个python内置的装饰器,可以装饰在"类内部方法上"

可以将该方法调用方式由 对象.方法() ----> 对象.方法

为什么要用property:

ps: 在某些场景下,调用的方法只是用来获取计算后的某个值

ps : 必须通过 对象.方法() 方式调用,让该方式看起来像动词、

让名词的方法,调用时更为合理

目的是为了,迷惑调用者,调用的方法误以为是 属性

class User:
    def __init__(self, name, weight, height):
        self.name = name
        self.weight = weight
        self.height = height
    @property
    def dim(self):
        return self.weight / (self.height ** 2)

    # @property
    # def name(self):
    #     return self._name
user_obj = User('WC', 75, 1.4)
user_obj.dim
print(user_obj.dim)

原文地址:https://www.cnblogs.com/127-2933/p/11944679.html