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分析apache访问日志脚本分享
Feb 26 Python
PyCharm使用教程之搭建Python开发环境
Jun 07 Python
python爬虫之百度API调用方法
Jun 11 Python
Django学习笔记之为Model添加Action
Apr 30 Python
Python的matplotlib绘图如何修改背景颜色的实现
Jul 16 Python
Python列表的切片实例讲解
Aug 20 Python
pygame实现俄罗斯方块游戏(基础篇3)
Oct 29 Python
python使用ctypes调用扩展模块的实例方法
Jan 28 Python
解决django的template中如果无法引用MEDIA_URL问题
Apr 07 Python
使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例
Dec 11 Python
Python实现DBSCAN聚类算法并样例测试
Jun 22 Python
Pandas数据结构之Series的使用
Mar 31 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
深入理解php printf() 输出格式化的字符串
2016/05/23 PHP
IIS 7.5 asp Session超时时间设置方法
2017/04/17 PHP
风吟的小型JavaScirpt库 (FY.JS).
2010/03/09 Javascript
javascript实现促销倒计时+fixed固定在底部
2013/09/18 Javascript
Javascript获取当前时间函数和时间操作小结
2014/10/01 Javascript
JavaScript让网页出现渐隐渐显背景颜色的方法
2015/04/21 Javascript
JavaScript Date对象详解
2016/03/01 Javascript
使用ajaxfileupload.js实现上传文件功能
2016/08/13 Javascript
基于jquery实现的银行卡号每隔4位自动插入空格的实现代码
2016/11/22 Javascript
ES6中字符串string常用的新增方法小结
2017/11/07 Javascript
使用layer弹窗和layui表单实现新增功能
2018/08/09 Javascript
vue移动端微信授权登录插件封装的实例
2018/08/28 Javascript
javascript实现动态时钟的启动和停止
2020/07/29 Javascript
Vue使用vue-draggable 插件在不同列表之间拖拽功能
2020/03/12 Javascript
js屏蔽F12审查元素,禁止修改页面代码等实现代码
2020/10/02 Javascript
Antd-vue Table组件添加Click事件,实现点击某行数据教程
2020/11/17 Javascript
CentOS 7 安装python3.7.1的方法及注意事项
2018/11/01 Python
使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件及出现问题解决方法
2019/09/06 Python
自定义Django Form中choicefield下拉菜单选取数据库内容实例
2020/03/13 Python
python实现ftp文件传输系统(案例分析)
2020/03/20 Python
Python实现捕获异常发生的文件和具体行数
2020/04/25 Python
MxNet预训练模型到Pytorch模型的转换方式
2020/05/25 Python
Python 通过正则表达式快速获取电影的下载地址
2020/08/17 Python
简单几步用纯CSS3实现3D翻转效果
2019/01/17 HTML / CSS
html5 迷宫游戏(碰撞检测)实例一
2013/07/25 HTML / CSS
开普敦通行证:Cape Town Pass
2019/07/18 全球购物
美国健康和保健平台:healtop
2020/07/02 全球购物
上海中网科技笔试题
2012/02/19 面试题
大学四年的个人自我评价
2014/01/14 职场文书
入党申请自荐书范文
2014/02/11 职场文书
校企合作协议书
2014/04/16 职场文书
十佳家长事迹材料
2014/08/26 职场文书
2015年文员个人工作总结
2015/04/09 职场文书
小学五年级班主任工作经验交流材料
2015/11/02 职场文书
分享CSS盒子模型隐藏的几种方式
2022/02/28 HTML / CSS
python中pycryto实现数据加密
2022/04/29 Python