Python笔记(十八)_私有属性、实例属性、类属性
私有属性
如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,就变成了一个私有属性,只有内部可以访问,外部不能直接访问或修改。
这样就确保了外部代码不能随意修改对象内部的状态,这样通过访问限制的保护,代码更加健壮
那如果想让外部代码获取私有属性该怎么办?
修改内部代码:可以给类增加访问方法(return self.__name)和修改方法(self.__score=score)
>>>class Student(object):
def get_name(self):
return self.__name
>>>class Student(object):
def set_score(self, score):
self.__score = score
从外部直接调用:不能直接访问__name是因为Python解释器对外把__name变量改成了_Student__name,其实仍然可以通过bart.__Student__name来访问私有属性(不推荐使用)
实例属性
方法一:通过实例变量绑定(只对绑定的实例起作用)
>>>class Student():
pass
>>>bart = Student()
可以自由地给一个实例变量绑定属性,比如,给实例bart绑定一个name属性:
>>>bart.name = 'Bart Simpson'
>>>bart.name
'Bart Simpson'
方法二:通过self变量绑定(所有实例都起作用)
由于类可以起到模板的作用,因此可以在创建类的时候,通过定义一个特殊的__init__方法,把一些我们认为必须绑定的属性强制填写进去
>>>class Student(object):
def __init__(self, name, score):
self.name = name
self.score = score
注意:__init__方法的第一个参数永远是self,表示创建的实例本身;因此在__init__方法内部,就可以把各种属性绑定到self,也就是绑定到实例,因为self就指向创建的实例本身。
有了__init__方法,在创建实例的时候,就不能传入空的参数了,必须传入与__init__方法匹配的参数
给实例限定属性
定义一个特殊的__slots__变量,来限制该class实例能添加的属性
>>>class Student(object):
__slots__ = ('name', 'age')
>>>s = Student()
>>>s.score = 99 #报错
注意:__slots__定义的属性仅对当前类实例起作用,对继承的子类是不起作用的,除非在子类中也定义一个__slots__
类属性
给类绑定属性:直接在class中定义即可
>>>class Student():
name = 'demi'
定义好的name即为类属性,这个属性虽然归类所有,但类的所有实例都可以访问
>>>s = Student()
>>>print(s.name)
demi
或者
>>>Student.name
demi
注意:
实例属性属于各个实例所有,互不干扰
类属性属于类所有,所有实例都可共用
不要对实例属性和类属性使用相同的名字,否则实例属性将屏蔽掉类属性
不要对属性和方法使用相同的名字,否则属性会覆盖方法
>>>class C:
def x(self):
print('Xman')
>>>c = C()
>>>c.x()
Xman
>>>c.x = 1
>>>c.x() #报错,属性与方法重名了
Python笔记(十八)_私有属性、实例属性、类属性的更多相关文章
- Python爬虫(十八)_多线程糗事百科案例
多线程糗事百科案例 案例要求参考上一个糗事百科单进程案例:http://www.cnblogs.com/miqi1992/p/8081929.html Queue(队列对象) Queue是python ...
- Python笔记(十五)_异常处理
try-except语句 try: 被检测代码 except Exception [as reason]: 出现异常后的处理代码 例: try: sum = 1+' f=open('未定义文件.txt ...
- Python笔记(十四)_永久存储pickle
pickle模块:将所有的Python对象转换成二进制文件存放 应用场景:编程时最好将大对象(列表.字典.集合等)用pickle写成永久数据包供程序调用,而不是直接写入程序 写入过程:将list转换为 ...
- [b0033] python 归纳 (十八)_队列Queue在多线程中使用(二)
# -*- coding: UTF-8 -*- """ 多线程同时读队列 使用 join(), task_done() 逻辑: 3个子线程并发 从有6个数据的队列中取数据 ...
- Python笔记(十九)_继承
继承 继承可以把父类的所有功能都直接拿过来,这样就不必从零做起,子类只需要新增自己特有的方法,也可以把父类不适合的方法覆盖重写 多重继承 通过多重继承,一个子类就可以同时获得多个父类的所有功能 > ...
- Python笔记(十二)_文件
文件的打开模式 'r':以只读的方式打开文件(默认) 'w':以写入的方式打开文件,会覆盖已存在的文件 'x':用写入的方式打开文件,如果文件已存在,会抛出异常 'a':用写入的方式打开文件,如果文件 ...
- Python - 面向对象编程 - 类变量、实例变量/类属性、实例属性
什么是对象和类 https://www.cnblogs.com/poloyy/p/15178423.html 什么是 Python 类.类对象.实例对象 https://www.cnblogs.com ...
- Python的程序结构[0] -> 属性/Property[0] -> 类属性、实例属性和私有属性
类属性.实例属性和私有属性 Python中类的属性主要包括类属性,实例属性和私有属性,下面是对三种属性的简单介绍 类属性 / Class Property 类属性在__init__()之外初始化,在外 ...
- python3.4学习笔记(十八) pycharm 安装使用、注册码、显示行号和字体大小等常用设置
python3.4学习笔记(十八) pycharm 安装使用.注册码.显示行号和字体大小等常用设置Download JetBrains Python IDE :: PyCharmhttp://www. ...
随机推荐
- [CCPC-Wannafly & Comet OJ 夏季欢乐赛(2019)]飞行棋
题目链接:https://www.cometoj.com/contest/59/problem/E?problem_id=2714 求期望并且一堆转移基本上就是期望dp了(叉腰 照常的设dp[i]表示 ...
- 5105 pa3 Distributed File System based on Quorum Protocol
1 Design document 1.1 System overview We implemented a distributed file system using a quorum based ...
- 用Node.js原生代码实现静态服务器
---恢复内容开始--- 后端中服务器类型有两种 1. web服务器[ 静态服务器 ] - 举例: wamp里面www目录 - 目的是为了展示页面内容 - 前端: nginx 2. 应用级服务器[ a ...
- 云中沙箱学习笔记2-ECS之初体验
1.1 背景知识 云服务器(Elastic Compute Service, 简称ECS),是一种简单高效,处理能力可以弹性伸缩的计算服务.ECS的相关术语说明如下: --实例(Instance):是 ...
- C# 获取一个文件的MD5值
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Tex ...
- [POI2007]POW-The Flood(并查集)
[POI2007]POW-The Flood Description AKD 市处在一个四面环山的谷地里.最近一场大暴雨引发了洪水,AKD 市全被水淹没了.Blue Mary,AKD 市的市长,召集了 ...
- 占卜DIY
题目地址 Code #include<iostream> #include<vector> #include<map> using namespace std; s ...
- 前端每日实战:35# 视频演示如何把 CSS 径向渐变用得出神入化,只用一个 DOM 元素就能画出国宝熊猫
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/odKrpy 可交互视频教程 此视频 ...
- MyBatis体系学习总览
MyBatis特点:MyBatis是面向SQL的,核心是SQL结果和Map的映射.不要求一定与实体对象进行映射. MyBatis 可以使用 XML 或注解进行配置和映射, MyBatis 通过将参数映 ...
- export default{} 和 new Vue()都是什么意思
在生成.导出.导入.使用 Vue 组件的时候,有些新手就会常常被位于不同文件的 new Vue() 和 export default{} 搞得晕头转向.它们含义到底是什么,又有什么异同呢? 首先,Vu ...