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