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 11 Python
python reduce 函数使用详解
Dec 05 Python
机器学习10大经典算法详解
Dec 07 Python
使用PyInstaller将python转成可执行文件exe笔记
May 26 Python
python实现将一个数组逆序输出的方法
Jun 25 Python
2019 Python最新面试题及答案16道题
Apr 11 Python
python实现简单五子棋游戏
Jun 18 Python
PyTorch的深度学习入门教程之构建神经网络
Jun 27 Python
python实现PID算法及测试的例子
Aug 08 Python
Python3 中作为一等对象的函数解析
Dec 11 Python
Python调用接口合并Excel表代码实例
Mar 31 Python
python二维图制作的实例代码
Dec 03 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 什么是PEAR?
2009/03/19 PHP
php新浪微博登录接口用法实例
2014/12/23 PHP
使用JavaScript创建新样式表和新样式规则
2016/06/14 PHP
PHP生成图片缩略图类示例
2017/01/12 PHP
PHP调用API接口实现天气查询功能的示例
2017/09/21 PHP
JavaScript在浏览器标题栏上显示当前日期和时间的方法
2015/03/19 Javascript
JavaScript操作URL的相关内容集锦
2015/10/29 Javascript
JavaScript判断表单为空及获取焦点的方法
2016/02/12 Javascript
帝国cms首页列表页实现点赞功能
2017/10/30 Javascript
vue组件与复用详解
2018/04/08 Javascript
vue.js提交按钮时进行简单的if判断表达式详解
2018/08/08 Javascript
详解Vue中数组和对象更改后视图不刷新的问题
2018/09/21 Javascript
微信小程序云开发 生成带参小程序码流程
2019/05/18 Javascript
JS实现简单tab选项卡切换
2019/10/25 Javascript
es6中let和const的使用方法详解
2020/02/24 Javascript
JS监听组合按键思路及实现过程
2020/04/17 Javascript
python3个性签名设计实现代码
2018/06/19 Python
Python处理时间日期坐标轴过程详解
2019/06/25 Python
使用python 对验证码图片进行降噪处理
2019/12/18 Python
Python RabbitMQ实现简单的进程间通信示例
2020/07/02 Python
Django和Ueditor自定义存储上传文件的文件名
2021/02/25 Python
详解CSS3的图层阴影和文字阴影效果使用
2016/06/09 HTML / CSS
html5小技巧之通过document.head获取head元素
2014/06/04 HTML / CSS
eBay德国站:eBay.de
2017/09/14 全球购物
美国战术品牌:5.11 Tactical
2019/05/01 全球购物
俄罗斯Sportmarket体育在线商店:用于旅游和户外活动
2019/11/12 全球购物
Belvilla法国:休闲度假房屋出租
2020/10/03 全球购物
高中生学习生活的自我评价
2013/10/09 职场文书
物流专业大学生的自我鉴定
2013/11/13 职场文书
企业演讲稿范文
2013/12/28 职场文书
高一地理教学反思
2014/01/18 职场文书
酒店员工管理制度
2015/08/05 职场文书
《跨越海峡的生命桥》教学反思
2016/02/18 职场文书
应届毕业生的自我评价
2019/06/21 职场文书
Python提取PDF指定内容并生成新文件
2021/06/09 Python
解决vue-router的beforeRouteUpdate不能触发
2022/04/14 Vue.js