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使用scrapy解析js示例
Jan 23 Python
详解Python编程中包的概念与管理
Oct 16 Python
python实现获取Ip归属地等信息
Aug 27 Python
深入理解python中的select模块
Apr 23 Python
pycharm下打开、执行并调试scrapy爬虫程序的方法
Nov 29 Python
python3.5+tesseract+adb实现西瓜视频或头脑王者辅助答题
Jan 17 Python
Python中sort和sorted函数代码解析
Jan 25 Python
使用python进行拆分大文件的方法
Dec 10 Python
tensorflow实现从.ckpt文件中读取任意变量
May 26 Python
Python自动化xpath实现自动抢票抢货
Sep 19 Python
pytorch model.cuda()花费时间很长的解决
Jun 01 Python
python如何利用cv2.rectangle()绘制矩形框
Dec 24 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/05/07 PHP
PHP积分兑换接口实例
2015/02/09 PHP
PHP时间日期增减操作示例【date strtotime实现加一天、加一月等操作】
2018/12/21 PHP
php时间戳转换代码详解
2019/08/04 PHP
PHP获取类私有属性的3种方法
2020/09/10 PHP
PHP基于进程控制函数实现多线程
2020/12/09 PHP
Javascript图像处理—虚拟边缘介绍及使用方法
2012/12/27 Javascript
JS动态调用方法名示例介绍
2013/12/18 Javascript
jquery默认校验规则整理
2014/03/24 Javascript
JavaScript继承基础讲解(原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承)
2014/08/16 Javascript
node.js中的emitter.emit方法使用说明
2014/12/10 Javascript
JS显示下拉列表框内全部元素的方法
2015/03/31 Javascript
JavaScript获取表单enctype属性的方法
2015/04/02 Javascript
JS实现淡蓝色简洁竖向Tab点击切换效果
2015/10/06 Javascript
js实现抽奖效果
2017/03/27 Javascript
AngularJS基于factory创建自定义服务的方法详解
2017/05/25 Javascript
使用Vue 实现滑动验证码功能
2019/06/27 Javascript
node获取客户端ip功能简单示例
2019/08/24 Javascript
jQuery实现简单弹幕效果
2019/11/28 jQuery
vue+element实现图片上传及裁剪功能
2020/06/29 Javascript
vue实现几秒后跳转新页面代码
2020/09/09 Javascript
在Python中操作字符串之startswith()方法的使用
2015/05/20 Python
Python使用剪切板的方法
2017/06/06 Python
Python实现通过解析域名获取ip地址的方法分析
2019/05/17 Python
python pandas生成时间列表
2019/06/29 Python
python matplotlib库的基本使用
2020/09/23 Python
python实现图片,视频人脸识别(opencv版)
2020/11/18 Python
HTML5 canvas基本绘图之绘制线条
2016/06/27 HTML / CSS
Banggood官网:面向全球客户的综合商城
2017/04/19 全球购物
Shoes For Crews法国官网:美国领先的防滑鞋设计和制造商
2018/01/01 全球购物
值传递还是引用传递
2015/02/08 面试题
高级Java程序员面试要点
2013/08/02 面试题
大学毕业生简单自荐信
2013/11/05 职场文书
暑期实践思想汇报
2014/01/06 职场文书
初中新生军训方案
2014/05/13 职场文书
zabbix如何添加监控主机和自定义监控项
2022/08/14 Servers