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

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方法进行属性的操作。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,185评论 6 13
  • 一、面向对象,这个对象到底是什么? 这个对象不是python中的实例,python中我们把一个类的实例也叫做对象,...
    youngkun阅读 930评论 0 2
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,778评论 18 399
  • 闭上眼,躺在吊床上,任自己在空中飞舞,睁开眼,看到了一个新的世界,寂静的我在吵杂的人群中显的格格不入。 月亮是夜的...
    ad0f90eeba1d阅读 330评论 0 0
  • 今天还是在小区里晃,在每天走过的路边,今天有株草一下吸引了我的注意。它的花那么特别那么美,经常路过都没注意。人生不...
    lemei阅读 153评论 0 0