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相关内容感兴趣的读者可查看本站专题:《python面向对象程序设计入门与进阶教程》、《python数据结构与算法教程》、《python函数使用技巧总结》、《python字符串操作技巧汇总》、《python编码操作技巧总结》及《python入门与进阶经典教程》
希望本文所述对大家python程序设计有所帮助。
推荐阅读
-
Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解
-
Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析
-
OC基础成员变量、属性变量、实例方法与类方法
-
对继承与多态、成员变量的隐藏和方法重写、super关键字、final关键字、对象的上转型对象、抽象类的学习理解(java)
-
Python面向对象之静态属性、类方法与静态方法分析
-
PHP 面向对象程序设计之类属性与类常量实现方法分析
-
Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析
-
OC基础成员变量、属性变量、实例方法与类方法
-
php面向对象:成员方法、成员变量、类的常量
-
php面向对象:成员方法、成员变量、类的常量