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 相关文章推荐
利用一个简单的例子窥探CPython内核的运行机制
Mar 30 Python
python判断图片宽度和高度后删除图片的方法
May 22 Python
在Python的Django框架中生成CSV文件的方法
Jul 22 Python
Python tkinter模块中类继承的三种方式分析
Aug 08 Python
解决nohup重定向python输出到文件不成功的问题
May 11 Python
python 使用pandas计算累积求和的方法
Feb 08 Python
pyqt5实现登录界面的模板
May 30 Python
python实现beta分布概率密度函数的方法
Jul 08 Python
对django layer弹窗组件的使用详解
Aug 31 Python
基于python进行抽样分布描述及实践详解
Sep 02 Python
python3实现raspberry pi(树莓派)4驱小车控制程序
Feb 12 Python
Python实现淘宝秒杀功能的示例代码
Jan 19 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
将OICQ数据转成MYSQL数据
2006/10/09 PHP
PHP递归调用数组值并用其执行指定函数的方法
2015/04/01 PHP
PHP实践教程之过滤、验证、转义与密码详解
2017/07/24 PHP
firefox和IE系列的相关区别整理 以备后用
2009/12/28 Javascript
麻雀虽小五脏俱全 Dojo自定义控件应用
2010/09/04 Javascript
jsTree 基于JQuery的排序节点 Bug
2011/07/26 Javascript
jquery ajax return没有返回值的解决方法
2011/10/20 Javascript
利用JQuery动画制作滑动菜单项效果实现步骤及代码
2013/02/07 Javascript
介绍JavaScript的一个微型模版
2015/06/24 Javascript
JavaScript实现获取某个元素相邻兄弟节点的prev与next方法
2016/01/25 Javascript
纯JS代码实现一键分享功能
2016/04/20 Javascript
js创建对象几种方式的优缺点对比
2016/09/28 Javascript
js实现延迟加载的几种方法
2017/04/24 Javascript
详解angularjs的数组传参方式的简单实现
2017/07/28 Javascript
微信小程序 input输入及动态设置按钮的实现
2017/10/27 Javascript
详解webpack与SPA实践之开发环境搭建
2017/12/18 Javascript
Nuxt配合Node在实际生产中的应用详解
2018/08/07 Javascript
jQuery操作事件完整实例分析
2020/01/10 jQuery
解决vue项目 build之后资源文件找不到的问题
2020/09/12 Javascript
python3模拟百度登录并实现百度贴吧签到示例分享(百度贴吧自动签到)
2014/02/24 Python
Python文件操作类操作实例详解
2014/07/11 Python
使用Python处理Excel表格的简单方法
2018/06/07 Python
python使用循环打印所有三位数水仙花数的实例
2018/11/13 Python
Python发送邮件功能示例【使用QQ邮箱】
2018/12/04 Python
python 判断矩阵中每行非零个数的方法
2019/01/26 Python
浅析python 中大括号中括号小括号的区分
2019/07/29 Python
ansible-playbook实现自动部署KVM及安装python3的详细教程
2020/05/11 Python
使用CSS媒体查询(Media Queries)和JavaScript判断浏览器设备类型的方法
2014/04/03 HTML / CSS
html5教程画矩形代码分享
2013/12/04 HTML / CSS
如何设置Java的运行环境
2013/04/05 面试题
怎样声明子类
2013/07/02 面试题
为什么在使用动态 SQL 语句时必须为低层数据库对象授予权限
2012/12/13 面试题
文员的职业生涯规划发展方向
2014/02/08 职场文书
婚礼女方父母答谢词
2015/01/04 职场文书
质检员岗位职责范本
2015/04/07 职场文书
nginx网站服务如何配置防盗链(推荐)
2021/03/31 Servers