美文网首页
关于python中的面向对象(二)

关于python中的面向对象(二)

作者: 梅花九弄丶 | 来源:发表于2017-08-03 17:40 被阅读0次

    python中的面向对象之封装:
    封装:指的是对全局作用域中其他区域隐藏多余信息的原则。在一些语言中,这意味着对象的状态(特性)只对自己的方法可用,在python中,所有特性都是公开可用的。
    如:# 定义了一个商品类型,封装和商品有关系的数据

    def __init__(self, name, price, stock):
    [self.name*
    "); background-size: cover; background-position: 0px 2px;">*](http://link.zhihu.com/?target=http%3A//self.name) = name
    self.price = price
    self.stock = stock
    

    封装具体的数据到对象中:对象是通过类型来封装具体的数据的

    g1 = Goods(“连衣裙”, 199, 120)
    将对象敏感的数据,封装在类的内部,不让外界直接访问;而是通过定义的set/get方法来间接访问内部的数据的过程,此时,就可以在set/get方法中,添加条件限制代码!

    属性私有化,才能让外界不能直接访问

    在python2和python3中,约定了以一个下划线开头的变量,是私有变量,外界不要直接使用

    python3中,要求两个下划线开头的属性,表示当前类的私有属性,外界不能访问

    如:

    def __init__(self, name, age):
    self.__name = name
    self.__age = age
    
    def set_name(self, name):
    self.__name = name
    def get_name(self):
    return self.__name
    
    def set_age(self, age):
    if age >=0 and age <= 100:
    self.__age = age
    else:
    print("设置的年龄不合法...")
    def get_age(self):
    return self.__age
    
    def __str__(self):
    return "姓名:%s;年龄:%s" % (self.__name, self.__age)
    
    p = Person("tom", 12)
    print(p)
    p.set_age(1200)
    print(p) 
    

    封装实现的步骤
    1.完成一个类的定义
    2.所有属性私有化
    3.给每个属性提供set/get方法

    不带下划线的属性:直接访问(读取/修改),推门而入
    带一个下划线的属性:约定(项目规范)是假私有属性,不让直接访问;君子约定:进门前敲门。
    带两个下划线的属性:私有属性。反锁门,进门前必须敲门!

    将方法的实现隐藏起来,提高代码的安全性

    def __init__(self, name):
    self.__name = name
    
    
    @property #给获取值的方法,添加@property------------------------------------------------>注解
    def get_name(self):
    return self.__name
    
    @get_name.setter------------------------------>注解
    def set_name(self, name):
    self.__name = name
    
    c = Computer("Alienware")
    print(c.get_name)
    c.set_name = "HP"
    print(c.get_name)
    

    封装的注解方式,在一定程度上,能隐藏我们方法在底层的实现,让调用者的操作变得简单。但是同时也降低了代码的可读性,后续的操作中,我们还是遵循原来封装的操作方案将类的属性私有化,提供set/get方法进行属性的操作。

    相关文章

      网友评论

          本文标题:关于python中的面向对象(二)

          本文链接:https://www.haomeiwen.com/subject/rfnplxtx.html