Python编程之属性和方法实例详解


Posted in Python onMay 19, 2015

本文实例讲述了Python编程中属性和方法使用技巧。分享给大家供大家参考。具体分析如下:

一、属性

在python中,属性分为公有属性和私有属性,公有属性可以在类的外部调用,私有属性不能在类的外部调用。公有属性可以是任意变量,私有属性是以双下划线开头的变量。

下面我们定义一个People类,它有一个公有属性name,和一个私有属性__age。

class People():
def __init(self):
self.name='张珊'
self.__age=24

我们创建一个People类的实例,P1,当我们调用它的私有属性__age时发现有如下错误。

>>> p1.__age
Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    p1.__age
AttributeError: 'People' object has no attribute '__age'

这就说明了私有属性不可以在类的外部使用。那么我们要想调用私有属性的值,就可以在类的内部通过定义一个方法来调用。

>>> class People():
def __init__(self):
  self.name='jack'
  self.__age=23
def showinfo(self):
  print(self.__age)
>>> p2=People()
>>> p2.showinfo()
23

可能有人会问,为什么加上双下划线的属性,我们就不可以在类的外部调用了呢?那么下面我们就探讨下python面向对象的私有机制。

Python中以双下划线开头的属性和方法,在被实例化后会自动在其名字前加_classname.因为名字被改变了,所以自然无法通过双下滑线开头的名字来访问,从而达到不可进入的目的。

我们可以通过实例名.__dict__来查看对象的属性集合。

Python中不同于其他面向对象的编程语言,python的设计哲学就是简单至上,因此如果你真的想要调用私有属性的话还是可以调用的。

二、方法

在python中方法分为公有方法、私有方法、类方法和静态方法。

下面我们看一个比较完整的例子

#!/usr/bin/python
#coding:utf-8
__author__ = 'MXi4oyu'
class People():
  def __init__(self):
    self.name='张珊'
    self.__age=23
  def fun1(self):
    #共有方法可以在类的外部进行调用
    #可以通过对象名.方法名来调用
    print("共有方法")
  def __fun2(self):
    #私有方法不能在类的外部进行调用
    #可以在类的其他方法中调用私有方法
    print("私有方法")
  def funcshow(self):
    self.__fun2()
  @classmethod
  #类方法要加上@classmethod修饰器,类方法可以通过类名.方法名进行调用
  def fun3(self):
    print("类方法")
  @staticmethod
  #静态方法需要加上@staticmethod修饰器,静态方法不需要加self,
  #同样可以通过类名.方法名调用
  def fun4():
    print("静态方法")
if __name__=='__main__':
  p1=People()
  p1.fun1()
  p1.funcshow()
  People.fun3()
  People.fun4()

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
Python使用urllib2模块实现断点续传下载的方法
Jun 17 Python
Python实现的科学计算器功能示例
Aug 04 Python
python实现括号匹配的思路详解
Aug 23 Python
我喜欢你 抖音表白程序python版
Apr 07 Python
python实现点击按钮修改数据的方法
Jul 17 Python
Python Opencv任意形状目标检测并绘制框图
Jul 23 Python
python实现车牌识别的示例代码
Aug 05 Python
在pycharm中配置Anaconda以及pip源配置详解
Sep 09 Python
python3 Scrapy爬虫框架ip代理配置的方法
Jan 17 Python
keras中的History对象用法
Jun 19 Python
python pip如何手动安装二进制包
Sep 30 Python
python如何正确使用yield
May 21 Python
python实现提取百度搜索结果的方法
May 19 #Python
在Python中操作字符串之rstrip()方法的使用
May 19 #Python
Python映射拆分操作符用法实例
May 19 #Python
Python中的rjust()方法使用详解
May 19 #Python
python抓取百度首页的方法
May 19 #Python
Python递归遍历列表及输出的实现方法
May 19 #Python
Python中random模块用法实例分析
May 19 #Python
You might like
使用php重新实现PHP脚本引擎内置函数
2007/03/06 PHP
Discuz Uchome ajaxpost小技巧
2011/01/04 PHP
Laravel 4 初级教程之视图、命名空间、路由
2014/10/30 PHP
javascript语句中的CDATA标签的意义
2007/05/09 Javascript
jquery使用jxl插件导出excel示例
2014/04/14 Javascript
jQuery学习笔记之jQuery.fn.init()的参数分析
2014/06/09 Javascript
JS中产生20位随机数以0-9为例也可以是a-z A-Z
2014/08/01 Javascript
jquery 插件实现瀑布流图片展示实例
2015/04/03 Javascript
JavaScript动态改变div属性的实现方法
2015/07/22 Javascript
js传值后台中文出现乱码的解决方法
2016/06/30 Javascript
带你快速理解javascript中的事件模型
2017/08/14 Javascript
简述Angular 5 快速入门
2017/11/04 Javascript
angularjs实现对表单输入改变的监控(ng-change和watch两种方式)
2018/08/29 Javascript
CentOS7中源码编译安装NodeJS的完整步骤
2018/10/13 NodeJs
用 js 写一个 js 解释器过程详解
2019/08/02 Javascript
详解Vue.js 作用域、slot用法(单个slot、具名slot)
2019/10/15 Javascript
JavaScript实现移动端弹窗后禁止滚动
2020/05/25 Javascript
node.js 基于 STMP 协议和 EWS 协议发送邮件
2021/02/14 Javascript
Python机器学习之SVM支持向量机
2017/12/27 Python
Python3标准库之threading进程中管理并发操作方法
2020/03/30 Python
Python爬虫爬取ts碎片视频+验证码登录功能
2021/02/22 Python
详解前端HTML5几种存储方式的总结
2016/12/27 HTML / CSS
HTML5 图片预加载的示例代码
2020/03/25 HTML / CSS
Servlet的实例是在生命周期什么时候创建的?配置servlet最重要的是什么?
2012/05/30 面试题
大学四年的个人自我评价
2014/01/14 职场文书
小学语文教学经验交流材料
2014/06/02 职场文书
奥巴马当选演讲稿
2014/09/10 职场文书
国际残疾人日广播稿范文
2014/10/09 职场文书
工作后的感想
2015/08/07 职场文书
法制教育主题班会
2015/08/13 职场文书
毕业生自我鉴定范文
2019/05/13 职场文书
​(迎国庆)作文之我爱我的祖国
2019/09/19 职场文书
JS + HTML 罗盘式时钟的实现
2021/05/21 Javascript
CSS中Single Div 绘图技巧的实现
2021/06/18 HTML / CSS
Vue + iView实现Excel上传功能的完整代码
2021/06/22 Vue.js
P站美图推荐——变身女主角特辑
2022/03/20 日漫