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 相关文章推荐
在树莓派2或树莓派B+上安装Python和OpenCV的教程
Mar 30 Python
Python3连接SQLServer、Oracle、MySql的方法
Jun 28 Python
详解Django的model查询操作与查询性能优化
Oct 16 Python
如何利用Boost.Python实现Python C/C++混合编程详解
Nov 08 Python
python实现事件驱动
Nov 21 Python
Python操作Excel插入删除行的方法
Dec 10 Python
selenium处理元素定位点击无效问题
Jun 12 Python
pow在python中的含义及用法
Jul 11 Python
python爬虫 urllib模块反爬虫机制UA详解
Aug 20 Python
python的json中方法及jsonpath模块用法分析
Dec 06 Python
使用scrapy ImagesPipeline爬取图片资源的示例代码
Sep 28 Python
Pygame Time时间控制的具体使用详解
Nov 17 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生成zip文件类实例
2015/04/07 PHP
浅谈PHP发送HTTP请求的几种方式
2017/07/25 PHP
jquery EasyUI的formatter格式化函数代码
2011/01/12 Javascript
JavaScript事件处理器中的event参数使用介绍
2013/05/24 Javascript
jQuery避免$符和其他JS库冲突的方法对比
2014/02/20 Javascript
jQuery+css实现的蓝色水平二级导航菜单效果代码
2015/09/11 Javascript
JS实现网页右侧带动画效果的伸缩窗口代码
2015/10/29 Javascript
详解Bootstrap的aria-label和aria-labelledby应用
2016/01/04 Javascript
Node.js静态文件服务器改进版
2016/01/10 Javascript
JavaScript 正则表达式中global模式的特性
2016/02/25 Javascript
js实现内容显示并使用json传输数据
2016/03/16 Javascript
基于JavaScript实现购物网站商品放大镜效果
2016/09/06 Javascript
获取jqGrid中选择的行的数据
2016/11/30 Javascript
AngularJs实现聊天列表实时刷新功能
2017/06/15 Javascript
JavaScript实现滑动导航栏效果
2017/08/30 Javascript
ElementUI Tag组件实现多标签生成的方法示例
2019/07/08 Javascript
详解element-ui中表单验证的三种方式
2019/09/18 Javascript
JS中==、===你分清楚了吗
2020/03/04 Javascript
Element DateTimePicker日期时间选择器的使用示例
2020/07/27 Javascript
Python数据结构之单链表详解
2017/09/12 Python
Python字典循环添加一键多值的用法实例
2019/01/20 Python
Django 内置权限扩展案例详解
2019/03/04 Python
python实现爬取百度图片的方法示例
2019/07/06 Python
python读取图像矩阵文件并转换为向量实例
2020/06/18 Python
Lombok插件安装(IDEA)及配置jar包使用详解
2020/11/04 Python
详解Python爬虫爬取博客园问题列表所有的问题
2021/01/18 Python
使用postMessage让 iframe自适应高度的方法示例
2019/10/08 HTML / CSS
飞利浦比利时官方网站:Philips比利时
2016/08/24 全球购物
英国奢侈品概念店:Base Blu
2019/05/16 全球购物
软件测试有哪些?什么是配置项?
2012/02/12 面试题
家长会邀请书
2014/01/25 职场文书
毕业论文评语大全
2014/04/29 职场文书
群众路线党员个人剖析材料
2014/10/08 职场文书
2019毕业论文致谢词
2019/06/24 职场文书
分析设计模式之模板方法Java实现
2021/06/23 Java/Android
Redis超详细讲解高可用主从复制基础与哨兵模式方案
2022/04/07 Redis