Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析


Posted in Python onApril 12, 2019

本文实例讲述了Python面向对象程序设计类变量与成员变量、类方法与成员方法用法。分享给大家供大家参考,具体如下:

类变量与成员变量

在类中声明的变量我们称之为类变量[静态成员变量],

init()函数中声明的变量并且绑定在实例上的变量我们称之为成员变量。

类变量直接可以通过类名来调用。

1、若类变量与成员同时存在并且同名

使用对象来调用的时候,获取的结果是成员变量的值,

使用类名来调用,获取的是类变量的值。

2、若类变量存在,成员变量不存在,

使用对象来调用的时候,它首先寻找成员变量,

如果成员变量不存在。则去寻找类变量。

3、若类变量不存在,成员变量存在:

使用类名来调用,则会报错

总结:

类变量通过类名或者对象来调用都不会报错,但是成员变量只能通过对象来调用。

通过对象来修改类属性的时候,只能作用到对象自己本身,作用不到类,

若是通过类名来修改类属性,则只对类变量的值进行修改。

class Person(object):
  # 类变量
  name = "haha"
  age = "19"
  height = 170
  def __init__(self,name,age,weight):
    # 成员变量
    self.name = name
    self.age = age
    self.weight = weight
  def sayHeight(self):
    print(self.height)
per = Person("xiaoming",19,50)
print(per.name)
print(Person.name)
# print(Person.weight)
per.height = 190
print(per.height)
print(Person.height)
print('*********')
Person.height = 200
print(Person.height)
print(per.height)
per.sayHeight()

输出:

xiaoming
haha
190
170
*********
200
190
190

类方法与成员方法

类方法,成员方法

类方法:使用类名来调用的方法

成员方法:使用对象来调用的方法

若一个方法定义在类中,但是没有参数[一般默认self],此时我们只能通过类名来调用

若我们需要使用到一个类的对象,首先要实例化。

class Person(object):
  def __init__(self,name,age):
    self.name = name
    self.age = age
  def say(self):
    print("I am %s, I am %d year old"%(self.name,self.age))
  def sayHello():
    print('hello I am class function')
per = Person("xiaoming",19)
per.say()
Person.sayHello()

输出:

I am xiaoming, I am 19 year old
hello I am class function

类方法与静态方法

静态方法

当调用此方法时,不会将类的实例传递给它。

在类中定义的函数。

无需实例化类,就可以调用。它的定义在继承中,是不可变的。

类方法:

当调用此方法时,将函数所属的类作为第一个参数传递。

class A(object):
    def foo(self, x):
      print("executing foo(%s, %s)" % (self, x))
    @classmethod
    def class_foo(cls, x):
      print("executing class_foo(%s, %s)" % (cls, x))
    @staticmethod
    def static_foo(x):
      print("executing static_foo(%s)" % x)
  a = A()
  # 调用foo函数,参数传入1
  a.foo(1)
  # 调用class_foo,参数传入1
  A.class_foo(1)
  # 调用static_foo,参数传入1
  A.static_foo(1)
  a.static_foo(1):

输出:

executing foo(<__main__.A object at 0x0000024F126489B0>, 1)
executing class_foo(<class '__main__.A'>, 1)
executing static_foo(1)
executing static_foo(1)

下划线

下划线定义特殊的方法,一般情况下是系统定义名字,
如:

__init()____del()__

前双下划线(age):表示私有类型的变量(privated),只能在本类中进行访问,外界不能直接访问。如__age.

单下划线(_age):以单下划线开头的表示保护类型变量(protected),

保护类型的变量只允许本身以及子类访问,不能用于from module import *

[使用单下划线开头的时候,虽然变量能够直接被访问,但是请把变量视为一个保护类型的变量,尽量不要去访问。

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

Python 相关文章推荐
Python的ORM框架SQLAlchemy入门教程
Apr 28 Python
python anaconda 安装 环境变量 升级 以及特殊库安装的方法
Jun 21 Python
Python 和 JS 有哪些相同之处
Nov 23 Python
python TCP Socket的粘包和分包的处理详解
Feb 09 Python
使用Python完成15位18位身份证的互转功能
Nov 06 Python
Python3 虚拟开发环境搭建过程(图文详解)
Jan 06 Python
python 追踪except信息方式
Apr 25 Python
keras实现VGG16方式(预测一张图片)
Jul 07 Python
用python进行视频剪辑
Nov 02 Python
python实现简单的井字棋游戏(gui界面)
Jan 22 Python
教你一分钟在win10终端成功安装Pytorch的方法步骤
Jan 28 Python
Python控制台输出俄罗斯方块的方法实例
Apr 17 Python
Python、 Pycharm、Django安装详细教程(图文)
Apr 12 #Python
Python面向对象程序设计构造函数和析构函数用法分析
Apr 12 #Python
Python面向对象思想与应用入门教程【类与对象】
Apr 12 #Python
Python实现的登录验证系统完整案例【基于搭建的MVC框架】
Apr 12 #Python
Python实现的银行系统模拟程序完整案例
Apr 12 #Python
详解python--模拟轮盘抽奖游戏
Apr 12 #Python
Python实现的排列组合、破解密码算法示例
Apr 12 #Python
You might like
9个经典的PHP代码片段分享
2014/12/18 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
PHP XML Expat解析器知识点总结
2019/02/15 PHP
JavaScript与Div对层定位和移动获得坐标的实现代码
2010/09/08 Javascript
Jquery.LazyLoad.js修正版下载,实现图片延迟加载插件
2011/03/12 Javascript
jQuery EasyUI API 中文文档 - DataGrid数据表格
2011/11/17 Javascript
JQuery操作tr和td内容的方法实例
2013/03/06 Javascript
几种设置表单元素中文本输入框不可编辑的方法总结
2013/11/25 Javascript
实现网页页面跳转的几种方法(meta标签、js实现、php实现)
2014/05/20 Javascript
解释&amp;&amp;和||在javascript中的另类用法
2014/07/28 Javascript
用JavaScript判断CSS浏览器类型前缀的两种方法
2015/10/08 Javascript
jQuery获取checkbox选中的值
2016/01/28 Javascript
什么是JavaScript中的结果值?
2016/10/08 Javascript
Vue.js实现表格动态增加删除的方法(附源码下载)
2017/01/20 Javascript
使用Node.js实现简易MVC框架的方法
2017/08/07 Javascript
基于vue的短信验证码倒计时demo
2017/09/13 Javascript
修改UA在PC中访问只能在微信中打开的链接方法
2017/11/27 Javascript
vue实现的上传图片到数据库并显示到页面功能示例
2018/03/17 Javascript
angular6的table组件开发的实现示例
2018/12/26 Javascript
python插入排序算法的实现代码
2013/11/21 Python
剖析Django中模版标签的解析与参数传递
2015/07/21 Python
解决Linux系统中python matplotlib画图的中文显示问题
2017/06/15 Python
Python基于回溯法子集树模板解决最佳作业调度问题示例
2017/09/08 Python
详解 Python 与文件对象共事的实例
2017/09/11 Python
对python 操作solr索引数据的实例详解
2018/12/07 Python
flask框架jinja2模板与模板继承实例分析
2019/08/01 Python
python 生成器和迭代器的原理解析
2019/10/12 Python
pandas统计重复值次数的方法实现
2021/02/20 Python
html5-Canvas可以在web中绘制各种图形
2012/12/26 HTML / CSS
PHP面试题集
2016/12/18 面试题
蔬菜基地的创业计划书
2014/01/06 职场文书
八项规定整改措施
2014/02/12 职场文书
群众路线对照检查材料
2014/09/22 职场文书
公司向个人借款协议书范本
2014/10/09 职场文书
大学迎新生欢迎词
2015/09/29 职场文书
Spring Cloud OAuth2实现自定义token返回格式
2022/06/25 Java/Android