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初学者的一些编程技巧
Apr 03 Python
python读取oracle函数返回值
Jul 18 Python
手把手教你python实现SVM算法
Dec 27 Python
Python 批量合并多个txt文件的实例讲解
May 08 Python
Python补齐字符串长度的实例
Nov 15 Python
python IDLE 背景以及字体大小的修改方法
Jul 12 Python
python tkinter库实现气泡屏保和锁屏
Jul 29 Python
基于python实现把json数据转换成Excel表格
May 07 Python
keras用auc做metrics以及早停实例
Jul 02 Python
Python Pandas模块实现数据的统计分析的方法
Jun 24 Python
Opencv实现二维直方图的计算及绘制
Jul 21 Python
python神经网络 使用Keras构建RNN训练
May 04 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获取用户IPv4或IPv6地址的代码
2012/11/15 PHP
php随机生成数字字母组合的方法
2015/03/18 PHP
PHP使用Face++接口开发微信公众平台人脸识别系统的方法
2015/04/17 PHP
php+mysql实现简单登录注册修改密码网页
2016/11/30 PHP
PHP进阶学习之Geo的地图定位算法详解
2019/06/19 PHP
php探针使用原理和技巧讲解
2019/09/17 PHP
html中table数据排序的js代码
2011/08/09 Javascript
了解一点js的Eval函数
2012/07/26 Javascript
js获得参数的getParameter使用示例
2014/02/26 Javascript
javascript常用的方法整理
2015/08/20 Javascript
Javascript自执行匿名函数(function() { })()的原理浅析
2016/05/15 Javascript
JS结合bootstrap实现基本的增删改查功能
2016/07/22 Javascript
NodeJS遍历文件生产文件列表功能示例
2017/01/22 NodeJs
解决微信内置浏览器返回上一页强制刷新问题方法
2017/02/05 Javascript
微信小程序实现带刻度尺滑块功能
2017/03/29 Javascript
vue如何引用其他组件(css和js)
2017/04/13 Javascript
node.js中fs.stat与fs.fstat的区别详解
2017/06/01 Javascript
Bootstrap模态对话框用法简单示例
2018/08/31 Javascript
JavaScript Event Loop相关原理解析
2020/06/10 Javascript
python flask实现分页效果
2017/06/27 Python
详解Python:面向对象编程
2019/04/10 Python
如何使用Python标准库进行性能测试
2019/06/25 Python
Python终端输出彩色字符方法详解
2020/02/11 Python
如何查看Django ORM执行的SQL语句的实现
2020/04/20 Python
台湾三立电视电商平台:电电购
2019/09/09 全球购物
秦兵马俑教学反思
2014/02/07 职场文书
党员教师群众路线对照检查材料思想汇报
2014/09/29 职场文书
医院党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
教师党员个人自我评价
2015/03/04 职场文书
歌舞青春观后感
2015/06/10 职场文书
白银帝国观后感
2015/06/17 职场文书
大学生读书笔记范文
2015/07/01 职场文书
正规欠条模板
2015/07/03 职场文书
Python代码,能玩30多款童年游戏!这些有几个是你玩过的
2021/04/27 Python
Python Pandas读取Excel日期数据的异常处理方法
2022/02/28 Python
CentOS7设置ssh服务以及端口修改方式
2022/12/24 Servers