# 一:
class P:
__age = 30 #私有静态属性
def __init__(self,name):
self.__name = name #私有属性:属性名前面加上双下划线是私有属性。 def get_name(self):
return self.__name def __func(self): #私有方法
print('私有方法')
p = P('alex')
# print(p.__name) #报错,在类的外面,不能使用这个方法来调用私有属性。
print(p._P__name) #alex, 私有属性使用 对象._类名__属性名 调用才可以。
print(p.get_name()) #alex,调用方法可以返回私有属性。
print(p._P__age) #30,私有静态属性也是通过 对象._类名__属性名 调用。
print(p._P__func()) #私有方法通过 对象._类名__方法名() 调用。 # 二:
# 私有概念的作用:1.保护属性,不让它在类的外面被调用或者修改。2.不想被子类继承。
#父类的私有静态属性、私有属性、私有方法无法被子类继承:
class Game:
__country = 'CHINA' #私有静态属性
def __init__(self,name): #私有属性
self.__name = name
def __aggr(self): #私有方法
print('攻击力是100')
class Son(Game):pass s = Son('alex')
print(s._Son__country) #报错
print(s._Son__name)#报错
print(s._Son__aggr())#报错 # 三: @property
#超市商品:
class Goods:
def __init__(self,name,price,add_price,discount):#商品名字、进货价、加价、折扣
self.name = name
self.__price = price
self.add_price = add_price
self.discount = discount
@property #此装饰器把方法伪装成属性。
def price(self):
return (self.__price + self.add_price)* self.discount g = Goods('苹果',5,3,0.8)
print(g.price) #6.4,调用方法就像调用属性一样,省略括号()。 # 四、私有属性的删改查:
# 4.1删除私有属性:对象的私有属性被删除之后,类的私有属性也被删除。
class Goods:
def __init__(self,name,price):
self.name = name
self.__price = price
@property
def price(self):
return self.__price #返回值self.__price等于price()
@price.deleter #上和下两个方法的方法名必须跟此处的price同名才可以删除私有属性。
def price(self):
del self.__price # self.__price等于apple.price
apple = Goods('苹果',5)
print(apple.price)
del apple.price #del触发上面的deleter,接着调用price方法来删除私有属性。
print(apple.price) #'Goods' object has no attribute '_Goods__price',说明对象的私有属性已经被删除。
print(apple._Goods__price)#'Goods' object has no attribute '_Goods__price',类的私有属性也被删除了。 # 4.2修改私有属性: 修改是共享的,对象的私有属性被修改之后,类的私有属性也会被修改。
class Goods:
def __init__(self,name,price):
self.name = name
self.__price = price
@property
def price(self):
return self.__price #返回值self.__price等于price
@price.setter #上和下两个方法的方法名必须跟此处的price同名才可以修改私有属性。
def price(self,new_price):
self.__price = new_price # self.__price等于apple.price apple = Goods('苹果',5)
print(apple.price) #
apple.price = 8 #方法伪装成属性,看起来像属性修改,然后把8传给new_price。此操作是修改,而不是单独赋值。
print(apple.price) #8,修改是共享的,所以对象的私有属性和类的私有属性都被修改为8。
print(apple._Goods__price)#8,类的私有属性被修改为8。 #4.3修改私有静态属性: 修改原理跟修改私有属性一样,但是需要依靠实例化对象。苹果的折扣修改了,导致所有商品的折扣都被修改了,这是不合理的。
class Goods:
__discount = 1 #私有静态属性
@property
def discount(self):
return Goods.__discount #Goods.__discount = discount
@discount.setter
def discount(self,new_discount):
Goods.__discount = new_discount #Goods.__discount = apple.discount apple = Goods()
print(apple.discount) #
apple.discount = 0.8
print(apple.discount) # 0.8
print(apple._Goods__discount) # 0.8,苹果的折扣修改了,导致所有商品的折扣都被修改了,这是不合理的。 #4.4 @classmethod类方法。商品的折扣修改了,苹果的折扣也随着被修改,这是合理的。
class Goods:
__discount = 0.8
def __init__(self,name,price):
self.name = name
self.__price = price #price是进货价,使用私有属性保护起来,不想在类的外面被修改。
@property
def price(self):
return self.__price * Goods.__discount # 售价=进货价*折扣
@classmethod #类方法可以修改私有静态属性,不需要依靠实例化对象apple。
def discount(cls,new_discount): #对象是cls,所以这个方法里面不能有私有属性,因为私有属性的对象是self。
cls.__discount = new_discount apple = Goods('apple',5)
print(apple.price) # 4.0
Goods.discount(0.7)
print(apple._Goods__discount) # 0.7
print(apple.price) # 3.5 # 五、静态方法:@staticmethod跟对象和类没关系,apple()括号里面没有self。
class Goods:
@staticmethod #静态方法
def apple():
print('苹果')
g = Goods()
g.apple() #苹果
Goods.apple()#苹果

day16-封装(私有静态属性、私有属性、私有方法、类方法、静态方法)的更多相关文章

  1. Python进阶----类的结构(公有成员 , 私有成员(私有属性,私有方法),类方法,静态方法,属性) ,isinstance 和issubcalss ,元类(type())

    Python进阶----类的结构(公有成员 , 私有成员(私有属性,私有方法),类方法,静态方法,属性) ,isinstance 和issubcalss ,元类(type()) 一丶类的结构细分    ...

  2. JavaScript 公有 私有 静态属性和方法

    1.公有属性和公有方法 这里的 name  age  都是参数传递进去 可以在外面直接实例化调用. 2.私有属性和方法 私有的只能在函数内部使用 作用域的原因 3.静态属性和静态方法 这里我首先 创建 ...

  3. 007-Scala类的属性和对象私有字段实战详解

    007-Scala类的属性和对象私有字段实战详解 Scala类的使用实战 变量里的类必须赋初值 def函数时如果没参数可不带括号 2.不需要加Public声明 getter与setter实战 gett ...

  4. Dream------scala--类的属性和对象私有字段实战详解

    Scala类的属性和对象私有字段实战详解 一.类的属性 scala类的属性跟java有比较大的不同,需要注意的是对象的私有(private)字段 1.私有字段:字段必须初始化(当然即使不是私有字段也要 ...

  5. 面向对象~~类的成员: 私有成员,公有成员, 实例方法, 类方法, 静态方法, 属性(property), isinstance ,issubclass, 元类(type)

    一 私有成员公有成员 公有成员: 在任何地方都能访问 私有成员: 只有在类的内部才能访问 类从加载时,只要遇到类中的私有成员,都会在私有成员前面加上_类名 二 实例方法 实例方法就是类的实例能够使用的 ...

  6. 面向对象银角大王补充2-self就是调用当前方法的对象-静态字段,公有属性-封装的理解-继承的理解,普通方法,静态方法

    self是什么,就是一个函数,就是一个形式参数 4.self就是调用当前方法的对象 静态字段,公有属性 静态字段使用场景,每个对象中保存相同的东西时,可以使用静态字段,公有属性 5.封装的理解 类中封 ...

  7. [转] unix/linux下线程私有数据实现原理及使用方法

     在维护每个线程的私有数据的时候,我们可能会想到分配一个保存线程数据的数组,用线程的ID作为数组的索引来实现访问,但是有一个问题是系统生成的线程 ID不能保证是一个小而连续的整数,并且用数组实现的时候 ...

  8. python的类的 静态属性 类方法 静态方法

    一.静态属性 静态属性说的就是数据属性 1.定义一个房间的类,求下这个房间的面积 class Room: def __init__(self,name,ower,width,length,heigh) ...

  9. 无所不能的PowerMock,mock私有方法,静态方法,测试私有方法,final类

    1.为什么要用mock 我的一本书的解释: (1)创建所需的DB数据可能需要很长时间,如:调用别的接口,模拟很多数据 (2)调用第三方API接口,测试很慢, (3)编写满足所有外部依赖的测试可能很复杂 ...

随机推荐

  1. 1.softmax初探

    1.softmax初探在机器学习尤其是深度学习中,softmax是个非常常用而且比较重要的函数,尤其在多分类的场景中使用广泛.他把一些输入映射为0-1之间的实数,并且归一化保证和为1,因此多分类的概率 ...

  2. eclipse maven配置问题:org.apache.maven.archiver.mavenarchiver.getmanifest

    原因就是你的maven的配置文件不是最新的 1.help ->Install New Software -> add ->https://otto.takari.io/content ...

  3. LeetCode——79. 单词搜索

    给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻"单元格是那些水平相邻或垂直相邻的单元格.同一个单元格内的字 ...

  4. python笔记(很乱)、打算抽个时间再好好整理

    最近刚开始学python.总结的可能不是很好 print:打印值 input:可以进行等候赋值.进行一个交互 python中 需要两个==才为判断 变量:数字.字母.下划线组成 类型:int整数.st ...

  5. h5与安卓、ios交互

    1.安卓交互 h5调用安卓方法 window.webview.xxx() 安卓调用h5方法, 方法需要在全局注册 window['showUnreadMsg'] = () => { this.$ ...

  6. [FJOI2015]火星商店问题(线段树分治+可持久化Trie)

    重新写一年前抄题解的那题,当时我啥都不会只是Ctrl+C,Ctrl+V写过的题,今天重新写一遍. 题解: 不会线段树分治,还是学一下这东西吧,这是我的第一道线段树分治. 首先对于特殊商品,可以直接可持 ...

  7. (一)ORBSLAM2主要配置

    (1)ORBSLAM2文件夹里面有个build.sh文件,里面主要是编译时终端需要执行的命令,这里把它们放到.sh文件中统一执行. (2)阅读ORBSLAM2的CmakeList可以知道运行ORBSL ...

  8. 复杂分布式架构下的计算治理之路:计算中间件 Linkis

    前言 在当前的复杂分布式架构环境下,服务治理已经大行其道.但目光往下一层,从上层 APP.Service,到底层计算引擎这一层面,却还是各个引擎各自为政,Client-Server 模式紧耦合满天飞的 ...

  9. 微信小程序2048开发进度(二)

    对小程序首先进行游戏架构: 实现小程序的首页展示界面,初始化棋盘格,以及NEW GAME按钮,成绩展现.

  10. 使用hexo+GitHub搭建个人博客的心得(含教程)

    Author Email Yaoyao Liu yaoyaoliu@msn.com 前言 对于广大CS专业的学生和码农,找一个地方写博客,记录一些编程.配置环境.阅读论文的心得体会是一个很常见的习惯. ...