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批量修改文件名的实现代码
Sep 01 Python
Python httplib模块使用实例
Apr 11 Python
Python实现的HTTP并发测试完整示例
Apr 23 Python
python 异常处理总结
Oct 18 Python
Python Socket使用实例
Dec 18 Python
Python统计单词出现的次数
Apr 04 Python
python正则爬取某段子网站前20页段子(request库)过程解析
Aug 10 Python
基于Python安装pyecharts所遇的问题及解决方法
Aug 12 Python
浅谈django url请求与数据库连接池的共享问题
Aug 29 Python
基于Python生成个性二维码过程详解
Mar 05 Python
python使用列表的最佳方案
Aug 12 Python
python本地文件服务器实例教程
May 02 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 向访客和爬虫显示不同的内容
2009/11/09 PHP
拖动Html元素集合 Drag and Drop any item
2006/12/22 Javascript
javascript mouseover、mouseout停止事件冒泡的解决方案
2009/04/07 Javascript
javascript 模式设计之工厂模式学习心得
2010/04/27 Javascript
javascript分页代码实例分享(js分页)
2013/12/13 Javascript
JavaScript实现单击下拉框选择直接跳转页面的方法
2015/07/02 Javascript
Nodejs学习item【入门手上】
2016/05/05 NodeJs
基于jQuery实现页面搜索功能
2020/03/26 Javascript
JavaScript面向对象分层思维全面解析
2016/11/22 Javascript
nodejs判断文件、文件夹是否存在及删除的方法
2017/11/10 NodeJs
微信小程序实现多宫格抽奖活动
2020/04/15 Javascript
jQuery实现点击自身以外区域关闭弹出层功能完整示例【改进版】
2018/07/31 jQuery
vue cli安装使用less的教程详解
2019/07/12 Javascript
js计时事件实现圆形时钟
2020/03/25 Javascript
[00:36]DOTA2上海特级锦标赛 LGD战队宣传片
2016/03/04 DOTA
[57:59]完美世界DOTA2联赛循环赛 Ink Ice vs LBZS BO2第一场 11.05
2020/11/05 DOTA
python实现rsa加密实例详解
2017/07/19 Python
Python将list中的string批量转化成int/float的方法
2018/06/26 Python
解决pycharm 误删掉项目文件的处理方法
2018/10/22 Python
Pytorch 计算误判率,计算准确率,计算召回率的例子
2020/01/18 Python
基于Tensorflow使用CPU而不用GPU问题的解决
2020/02/07 Python
PyQt5实现简单的计算器
2020/05/30 Python
python实现二分类和多分类的ROC曲线教程
2020/06/15 Python
Python如何发送与接收大型数组
2020/08/07 Python
实例讲解CSS3中的border-radius属性
2015/08/18 HTML / CSS
html5 canvas合成海报所遇问题及解决方案总结
2017/08/03 HTML / CSS
捷克浴室和厨房设备购物网站:SIKO
2018/08/11 全球购物
澳大利亚波希米亚风时尚品牌:Tree of Life
2019/09/15 全球购物
山海经纬软件测试笔试题和面试题
2013/04/02 面试题
排查整治工作方案
2014/06/09 职场文书
十佳好少年事迹材料
2014/08/21 职场文书
党员弘扬焦裕禄精神思想汇报
2014/09/10 职场文书
优秀班主任申报材料
2014/12/16 职场文书
公司庆典欢迎词
2015/01/26 职场文书
道歉的话语大全
2015/05/12 职场文书
python制作图形界面的2048游戏, 基于tkinter
2021/04/06 Python