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的requests网络编程包使用教程
Jul 11 Python
Python的Flask框架标配模板引擎Jinja2的使用教程
Jul 12 Python
Django自定义分页效果
Jun 27 Python
机器学习python实战之决策树
Nov 01 Python
获取python文件扩展名和文件名方法
Feb 02 Python
python 识别图片中的文字信息方法
May 10 Python
使用Python监视指定目录下文件变更的方法
Oct 15 Python
python/sympy求解矩阵方程的方法
Nov 08 Python
python判断计算机是否有网络连接的实例
Dec 15 Python
Python实现的线性回归算法示例【附csv文件下载】
Dec 29 Python
python制作mysql数据迁移脚本
Jan 01 Python
ASP.NET Core中的配置详解
Feb 05 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制作的中文拼音首字母工具类
2014/12/11 PHP
linux平台编译安装PHP7并安装Redis扩展与Swoole扩展实例教程
2016/09/30 PHP
PHP Swoole异步读取、写入文件操作示例
2019/10/24 PHP
js 新浪的一个图片播放图片轮换效果代码
2008/07/15 Javascript
Json对象替换字符串占位符实现代码
2010/11/17 Javascript
ECMAScript 创建自己的js类库
2012/11/22 Javascript
使用js在页面中绘制表格核心代码
2013/09/16 Javascript
js自动生成对象的属性示例代码
2013/10/28 Javascript
jQuery插件扩展操作入门示例
2017/01/16 Javascript
JS数组交集、并集、差集的示例代码
2017/08/23 Javascript
jQuery+SpringMVC中的复选框选择与传值实例
2018/01/08 jQuery
Spring boot 和Vue开发中CORS跨域问题解决
2018/09/05 Javascript
微信小程序Flex布局用法深入浅出分析
2019/04/25 Javascript
原生JS无缝滑动轮播图
2019/10/22 Javascript
JS实现盒子拖拽效果
2020/02/06 Javascript
复制粘贴功能的Python程序
2008/04/04 Python
Python中max函数用于二维列表的实例
2018/04/03 Python
关于Tensorflow中的tf.train.batch函数的使用
2018/04/24 Python
Django管理员账号和密码忘记的完美解决方法
2018/12/06 Python
python3实现指定目录下文件sha256及文件大小统计
2019/02/25 Python
Keras使用tensorboard显示训练过程的实例
2020/02/15 Python
极简的HTML5模版
2015/07/09 HTML / CSS
总结html5自定义属性有哪些
2020/04/01 HTML / CSS
美国女性运动零售品牌:Lady Foot Locker
2017/05/12 全球购物
世界上最大的在线汽车租赁预订平台:Rentalcars.com(支持中文)
2018/10/12 全球购物
世界顶级户外运动品牌折扣网站:LeftLane Sports
2019/06/12 全球购物
早晨薰衣草在线女性精品店:Morning Lavender
2021/01/04 全球购物
结构和类有什么异同
2012/07/16 面试题
《七颗钻石》教学反思
2014/02/28 职场文书
农民工工资承诺书范文
2014/03/31 职场文书
三万活动总结
2014/04/28 职场文书
党员示范岗材料
2014/12/19 职场文书
五年级下册复习计划
2015/01/19 职场文书
研讨会通知
2015/04/27 职场文书
2019脱贫攻坚工作总结报告范本!
2019/08/06 职场文书
Sql Server 行数据的某列值想作为字段列显示的方法
2022/04/20 SQL Server