封装基础

  • 广义上面向对象的封装:代码的保护,面向对象的思想本身就是一种封装

  • 只让自己的对象能调用自己类中的方法

  • 狭义上的封装-面向对象三大特性之一(私有变量,用公有的方法封装私有属性,方法叫封装)

  • 把属性和方法都藏起来,不让你看见

  • 类的特性

    • 所有的私有,都是在变量左边加双下划线
    • 所有的私有,都不能在类的外部使用
    • 对象的私有属性
    • 类的私有方法
    • 类中私有的静态属性
class Person:
def __init__(self, name, password):
__key = 123 #静态私有属性
self.name = name
self.__password = password #在类的内部定义私有属性,会转换为_Person__password
def get_pwd(self): #通过公有方法get_pwd封装私有属性
return self.__password #返回__私有属性 def __set_pwd(self):#私有方法
print('set new password')
def changepwd(self):
self.__set_pwd()
#所有的私有,都是在变量左边加双下划线
#所有的私有,都不能在类的外部使用
#对象的私有属性
#类的私有方法
#类中私有的静态属性
alex = Person('alex', 'alex3714')
# print(alex.__password)#外部不可调用
print(alex.__dict__)
print(alex.get_pwd())#读取共用方法调取私有属性

使用set方法设置类变量

class Room:
def __init__(self,name, length, width):
self.__name = name
self.__length = length #私有属性
self.__width = width
def get_name(self):
return self.__name
def set_name(self,newName):#使用set方法可以规范变量的属性
if type(newName) is str and newName.isdigit() == False:#设置规范类的变量不可以是数字
self.__name = newName
else:
print('不合法的姓名')
return self.__name def area(self):
return self.__length*self.__width #返回私有属性计算值 jin = Room('金老板', 2,1)
print(jin.area()) jin.name ='二哥'
print(jin.name) jin.set_name('2') #传set_name数字则不修改
print(jin.get_name())
jin.set_name('东东') #传set_name字符则修改
print(jin.get_name()) >>>
2
二哥
不合法的姓名
金老板
东东

父类的私有属性可以被子类调用吗? 不可以

class Foo:
__key = '123' #变形为_Foo__Key class Son(Foo):
print(Foo.__key) #变形为_Son__key何父类不相同 >>>
File "C:/Users/jwang2/PycharmProjects/PlayPy/Demo/S9-day25-封装.py", line 62, in Son
print(Foo.__key)
AttributeError: type object 'Foo' has no attribute '_Son__key'

总结-会用到私有概念的场景

  • 隐藏起一个属性,不想让外部调用
  • 保护这个属性,不想让这个属性随意改变
  • 保护这个属性不被子类继承

Python类总结-封装(私有属性,方法)的更多相关文章

  1. Python类中的 私有变量和私有方法

    默认情况下,Python中的成员函数和成员变量都是公开的(public),在python中没有类似public,private等关键词来修饰成员函数和成员变量.在python中定义私有变量只需要在变量 ...

  2. 孤荷凌寒自学python第二十三天python类的封装

    孤荷凌寒自学python第二十三天python类的封装 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.从怎么样访问类的内部代码块中定义的私有属性说起 类中定义的私有属性和私有方法是无法被 ...

  3. Python 静态方法、类方法和属性方法

    Python 静态方法.类方法和属性方法 静态方法(staticmethod) staticmethod不与类或者对象绑定,类和实例对象都可以调用,没有自动传值效果,Python内置函数staticm ...

  4. Java通过反射机制修改类中的私有属性的值

    首先创建一个类包含一个私有属性: class PrivateField{ private String username = "Jason"; } 通过反射机制修改username ...

  5. python类可以任意添加属性

    python类可以任意添加属性 class A(object): def __init__(self): self.name = "zhangsan" self.age = 18 ...

  6. python 类和对象的属性

    python类和对象的属性分为类属性和对象属性两大类,类属性属于类,而对象属性属于对象. 1. 父类的对象属性会被子类的对象继承. 2. 父类的类属性会被子类继承,还是作为类属性,如果父类改变了类属性 ...

  7. CSIC_716_20191127【组合,封装、类的私有属性方法、property装饰器】

    组合 what?   组合是指一个对象中,包含另一个或多个对象. why?      减少代码的冗余. How?     在类中加入其他类的对象,实现跨类对象之间的联动. 耦合度  软件设计要 高内聚 ...

  8. python 类的封装/property类型/和对象的绑定与非绑定方法

    目录 类的封装 类的property特性 类与对象的绑定方法与非绑定方法 类的封装 封装: 就是打包,封起来,装起来,把你丢进袋子里,然后用绳子把袋子绑紧,你还能拿到袋子里的那个人吗? 1.隐藏属性和 ...

  9. 如何访问python类中的私有方法

    在python中,不像c#/java类语言,支持类的私有方法,这点有点像objc,虽然objc可以通过扩展extension来实现,但源于objc的运行时特性,我们还是可以通过非常手段来进行访问的.不 ...

随机推荐

  1. LeetCode-Max Points on a Line[AC源码]

    package com.lw.leet3; import java.util.HashMap; import java.util.Iterator; import java.util.Map; imp ...

  2. 2015/11/3用Python写游戏,pygame入门(3):字体模块、事件显示和错误处理

    游戏里面一般是肯定会出现文字显示的,即使是俄罗斯方块也应该显示分数.那么我们应该怎样来显示文字呢,今天一起学习一下pygame的font模块. 使用字体模块 pygame可以直接调用系统字体,也可以调 ...

  3. 【BZOJ】2599: [IOI2011]Race 点分治

    [题意]给一棵树,每条边有权.求一条简单路径,权值和等于K,且边的数量最小.N <= 200000, K <= 1000000.注意点从0开始编号,无解输出-1. [算法]点分治 [题解] ...

  4. 用ajax、PHP、session做购物车

    购物车网页代码 1.登录界面login.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ...

  5. 阿里iconfont引入方法

    原文:iconfont的引入方法   第一步:使用font-face声明字体@font-face {font-family: 'iconfont';src: url('iconfont.eot'); ...

  6. 【译】DTD - Entities

    原文:DTD - Entities 实体用于定义XML文档中特殊字符的快捷方式. 实体主要有四种类型: 内置实体(Built-in entities) 字符实体(Character entities) ...

  7. bzoj 3522 tree-dp 暴力

    首先我们知道,这个题可以N^2的做,我们先确定一个根,然后讨论下情况,合法的三个点只可能有三种情况,第一种是三个点有相同的lca,这种情况我们可以用tree-dp来解决,用dis[i][j]表示i为根 ...

  8. 【Git】git clone与git pull区别

    从字面意思也可以理解,都是往下拉代码,git clone是克隆,git pull 是拉.但是,也有区别: 从远程服务器克隆一个一模一样的版本库到本地,复制的是整个版本库,叫做clone.(clone是 ...

  9. Msql中的触发器

    解发器 当执行某种操作时解发的行为. 比如, 当表变动时触发的动作. 像商城订单, 当下单时, 库存减少. 语法: create trigger trigger_name after/befor in ...

  10. 16 - 文件操作-StringIO-BytesIO

    目录 1 文件操作 1.1 open函数介绍 1.2 打开操作 1.2.1 mode模式 1.2.2 文件指针 1.2.3 缓冲区 1.2.4 encoding编码 1.2.5 其他参数 1.3 读写 ...