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 OpenCV 调用摄像头并截图保存功能的实现代码
Jul 02 Python
django多对多表的创建,级联删除及手动创建第三张表
Jul 25 Python
PyCharm搭建Spark开发环境的实现步骤
Sep 05 Python
Python笔记之facade模式
Nov 20 Python
Python openpyxl模块原理及用法解析
Jan 19 Python
Python re正则表达式元字符分组()用法分享
Feb 10 Python
解决Python图形界面中设置尺寸的问题
Mar 05 Python
Python sql注入 过滤字符串的非法字符实例
Apr 03 Python
Python3实现飞机大战游戏
Apr 24 Python
浅析Python打包时包含静态文件处理方法
Jan 15 Python
用Python爬取各大高校并可视化帮弟弟选大学,弟弟直呼牛X
Jun 11 Python
5道关于python基础 while循环练习题
Nov 27 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
一个用php3编写的简单计数器
2006/10/09 PHP
php图片处理:加水印、缩略图的实现(自定义函数:watermark、thumbnail)
2010/12/02 PHP
php数据库配置文件一般做法分享
2012/07/07 PHP
深入探讨:PHP使用数据库永久连接方式操作MySQL的是与非
2013/06/05 PHP
PHP中数据库单例模式的实现代码分享
2014/08/21 PHP
php实现Mysql简易操作类
2015/10/11 PHP
PHP编程实现微信企业向用户付款的方法示例
2017/07/26 PHP
PHP中使用mpdf 导出PDF文件的实现方法
2018/10/22 PHP
php微信分享到朋友圈、QQ、朋友、微博
2019/02/18 PHP
父窗口获取弹出子窗口文本框的值
2006/06/27 Javascript
写了10年的Javascript也未必全了解的连续赋值运算
2011/03/25 Javascript
用显卡加速,轻松把笔记本打造成取暖器的办法!
2013/04/17 Javascript
JS限定手机版中图片大小随分辨率自动调整的方法
2016/12/05 Javascript
angular ng-repeat数组中的数组实例
2017/02/18 Javascript
原生JS封装animate运动框架的实例
2017/10/12 Javascript
Vue中用props给data赋初始值遇到的问题解决
2018/11/27 Javascript
vue实现微信二次分享以及自定义分享的示例
2019/03/20 Javascript
vue获取时间戳转换为日期格式代码实例
2019/04/17 Javascript
node.js中对Event Loop事件循环的理解与应用实例分析
2020/02/14 Javascript
[01:01:31]2018DOTA2亚洲邀请赛3月29日小组赛B组 Mineski VS paiN
2018/03/30 DOTA
tornado捕获和处理404错误的方法
2014/02/26 Python
Python格式化压缩后的JS文件的方法
2015/03/05 Python
使用Python抓取模板之家的CSS模板
2015/03/16 Python
python实现从网络下载文件并获得文件大小及类型的方法
2015/04/28 Python
在Django中使用Sitemap的方法讲解
2015/07/22 Python
python快速建立超简单的web服务器的实现方法
2018/02/17 Python
对python-3-print重定向输出的几种方法总结
2018/05/11 Python
解决Pycharm界面的子窗口不见了的问题
2019/01/17 Python
Python中使用遍历在列表中添加字典遇到的坑
2019/02/27 Python
HTML5+CSS3实现机器猫
2016/10/17 HTML / CSS
美国最大的半成品净菜电商:Blue Apron(蓝围裙)
2018/04/27 全球购物
介绍一下MD5加密算法
2016/11/12 面试题
yy婚礼司仪主持词
2014/03/14 职场文书
老干部工作先进事迹
2014/08/17 职场文书
2014年双拥工作总结
2014/11/21 职场文书
实战Python爬虫爬取酷我音乐
2022/04/11 Python