Python类变量与成员变量、类方法与静态方法详解
本文深入解析Python面向对象编程中的核心概念,详细区分类变量与成员变量的定义、调用优先级及修改影响。同时对比分析类方法、静态方法与成员方法的参数传递机制及使用场景,并通过代码示例说明下划线在命名规范中的作用,帮助开发者掌握Python类的正确用法。
Python类变量与成员变量详解
本文详细介绍Python面向对象编程中类变量与成员变量、类方法与成员方法的实际应用与区别,供读者参考学习。
类变量与成员变量的定义
在类体内部直接定义的变量被称为类变量(也称为静态成员变量)。
在init()函数中定义并绑定到实例对象上的变量,被称为成员变量(实例变量)。
类变量可以直接通过类名进行访问和调用。
当类变量与成员变量同名时:
若通过实例对象访问,Python会优先返回成员变量的值。
若通过类名访问,则返回类变量的值。
当仅存在类变量而成员变量不存在时:
通过实例对象访问时,Python会先查找该实例是否有对应的成员变量。
若实例中未找到该成员变量,Python会自动向上查找并返回类变量的值。
当仅存在成员变量而类变量不存在时:
若尝试通过类名直接访问,Python会抛出错误,因为类本身没有该属性。
核心总结:
类变量既可以通过类名调用,也可以通过实例对象调用;而成员变量只能通过实例对象调用。
通过实例对象修改类属性时,实际上是在该实例上创建或修改了一个同名的成员变量,这不会影响类变量本身。
若通过类名修改类属性,则直接修改的是类变量的值,所有未覆盖该属性的实例将受到影响。
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
Python类方法与静态方法解析
类方法与成员方法的区分
类方法与成员方法的概念
类方法:通常通过类名进行调用的方法。
成员方法:通常通过实例对象进行调用的方法。
如果方法定义在类中且没有参数(通常指省略了默认的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
类方法与静态方法的对比
静态方法:
调用静态方法时,不会自动将类的实例(self)或类本身(cls)作为第一个参数传递。
静态方法是在类中定义的普通函数。
无需实例化类即可直接调用,且在继承体系中,其定义行为不可变。
类方法:
调用类方法时,Python会自动将调用该方法所属的类作为第一个参数(cls)传递。
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)
Python命名规范中的下划线用法
命名规范中的下划线
下划线用于定义特殊方法或变量,通常由系统保留或遵循特定约定, 例如:
__init()__、__del()__
前双下划线(如):表示私有变量(private),仅能在类内部访问,外部无法直接访问。例如__age。
单下划线(如):表示受保护变量(protected)。
受保护变量允许类本身及其子类访问,但在使用from module import *导入时不会被导入。
尽管使用单下划线开头的变量在技术上仍可被访问,但应将其视为受保护变量,尽量避免在外部直接访问。
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python面向对象程序设计入门与进阶教程》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python编码操作技巧总结》及《Python入门与进阶经典教程》
希望本文所述对大家Python程序设计有所帮助。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









