python变量与对象的关系(Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析)
python变量与对象的关系
Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析本文实例讲述了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程序设计有所帮助。
原文链接:https://blog.csdn.net/lm_is_dc/article/details/80166817
- python多进程与多线程详解(Python线程之定位与销毁的实现)
- python yield 使用浅析(yii框架使用分页的方法分析)
- python创建一个xls文件(Python XlsxWriter模块Chart类用法实例分析)
- 怎么用python分析足球(使用Python进行体育竞技分析预测球队成绩)
- pythonredis列表(Python redis操作实例分析连接、管道、发布和订阅等)
- python的os模块操作(Python OS模块实例详解)
- python指定参数教程(详解Python传入参数的几种方法)
- python高级面试题及答案(python面试题小结附答案实例代码)
- python浪漫表白源码(python七夕浪漫表白源码)
- python核心编程和python基础教程(从0开始的Python学习014面向对象编程推荐)
- python中dict怎么创建(Python数据类型之Dict字典实例详解)
- python怎么从数组中取内容(python调用c++ ctype list传数组或者返回数组的方法)
- python3简单编程(Python3.5面向对象编程图文与实例详解)
- python变量指向讲解(详解python中init方法和随机数方法)
- python 内存读写(详解python持久化文件读写)
- python线程安全队列(Python 限制线程的最大数量的方法Semaphore)
- SCI检索 SSCI检索 EI检索 ISTP检索 CSCD检索简介(SCI检索SSCI检索EI检索)
- 参考文献里期刊名称的写法,你知道吗(参考文献里期刊名称的写法)
- 硕博期刊 SCI SSCI CSSCI分不清 一文带你看懂主流期刊分类(硕博期刊SCISSCI)
- 辱华品牌新百伦官宣新代言人IU,个别粉丝希望get爱豆同款(辱华品牌新百伦官宣新代言人IU)
- 巅峰时期被爆床照,曾被选国民最讨厌女星,IU不为人知的黑历史(巅峰时期被爆床照)
- 每天1万吨牛奶倒进下水道,美国大萧条一幕重现(每天1万吨牛奶倒进下水道)
热门推荐
- js如何解决iphone异形屏适配(Html5适配iphoneX刘海屏的简单实现)
- css3设置过渡效果(CSS3 media queries + jQuery实现响应式导航)
- APP界面设计的建议
- python opencv图像合并(Python3+OpenCV2实现图像的几何变换平移、镜像、缩放、旋转、仿射)
- php静态变量的含义(PHP中define 与 const定义常量的区别详解)
- php服务器有哪些(php服务器的系统详解)
- laravel接口响应时间(laravel请求参数校验方法)
- python与mysql的联系(MySQL和Python交互的示例)
- 宝塔面板里面的文件编辑怎么点开(宝塔面板可以上传多大文件?怎么设置文件大小?)
- pythonpickle使用方法(Python supervisor强大的进程管理工具的使用)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9