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 文件重命名工具代码
Jul 26 Python
Python提示[Errno 32]Broken pipe导致线程crash错误解决方法
Nov 19 Python
探索Python3.4中新引入的asyncio模块
Apr 08 Python
在Python中使用SQLite的简单教程
Apr 29 Python
Python中的默认参数详解
Jun 24 Python
Django csrf 验证问题的实现
Oct 09 Python
Django分页功能的实现代码详解
Jul 29 Python
如何基于Python制作有道翻译小工具
Dec 16 Python
pycharm 中mark directory as exclude的用法详解
Feb 14 Python
Python3监控windows,linux系统的CPU、硬盘、内存使用率和各个端口的开启情况详细代码实例
Mar 18 Python
利用Python实现斐波那契数列的方法实例
Jul 26 Python
Python实现加密的RAR文件解压的方法(密码已知)
Sep 11 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数组(array)输出的三种形式详解
2013/06/05 PHP
PHP中模拟处理HTTP PUT请求的例子
2014/07/22 PHP
PHP实现的简单日历类
2014/11/29 PHP
php中二分法查找算法实例分析
2016/09/22 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
2017/09/15 PHP
PHP 进度条函数的简单实例
2017/09/19 PHP
php微信公众号开发之欢迎老朋友
2018/10/20 PHP
javascript 运算数的求值顺序
2011/08/23 Javascript
jQuery获取浏览器中的分辨率实现代码
2013/04/23 Javascript
javascript设计模式之工厂模式示例讲解
2014/03/04 Javascript
举例讲解JavaScript中关于对象操作的相关知识
2015/11/16 Javascript
详解JavaScript常量定义
2017/01/03 Javascript
ES6新特性之解构、参数、模块和记号用法示例
2017/04/01 Javascript
浅谈angular4实际项目搭建总结
2017/12/01 Javascript
vue脚手架及vue-router基本使用
2018/04/09 Javascript
Jquery实现获取子元素的方法分析
2019/08/24 jQuery
Vue 数组和对象更新,但是页面没有刷新的解决方式
2019/11/09 Javascript
vue随机验证码组件的封装实现
2020/02/19 Javascript
python实现清屏的方法
2015/04/30 Python
python 将数据保存为excel的xls格式(实例讲解)
2018/05/03 Python
使用python判断你是青少年还是老年人
2018/11/29 Python
GitHub 热门:Python 算法大全,Star 超过 2 万
2019/04/29 Python
Python字典底层实现原理详解
2019/12/18 Python
Pytorch保存模型用于测试和用于继续训练的区别详解
2020/01/10 Python
荷兰DOD药房中文官网:DeOnlineDrogist
2020/12/27 全球购物
入党申请人的自我鉴定
2013/12/01 职场文书
现场活动策划方案
2014/08/22 职场文书
乡镇创先争优活动总结
2014/08/28 职场文书
大一工商管理职业生涯规划:有梦最美,行动相随
2014/09/18 职场文书
个人查摆问题整改措施
2014/10/04 职场文书
六查六看心得体会
2014/10/14 职场文书
2014年乡镇妇联工作总结
2014/12/02 职场文书
亚布力滑雪场导游词
2015/02/09 职场文书
Golang 实现获取当前函数名称和文件行号等操作
2021/05/08 Golang
javascript Number 与 Math对象的介绍
2021/11/17 Javascript
Java 使用类型为Object的变量指向任意类型的对象
2022/04/13 Java/Android