python---实例属性实例方法、类属性类方法、静态方法

本文介绍了Python中的类结构,包括实例、类对象和对象实例化的概念。详细阐述了实例属性、类属性、类方法和静态方法的区别与用法。实例属性与对象相关,每个对象都有独立的内存空间;类属性属于类对象,可以在类或对象上调用;类方法以`@classmethod`修饰,用于操作类属性;静态方法不依赖实例或类属性,以`@staticmethod`修饰。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

类的结构

实例的概念
在面向对象开发的时候,第一步是设计类,然后用类名()创建对象,创建对象的动作有两步:
1.在内存中为对象分配空间
2.调用初始化方法__init__为对象初始化。
对象创建之后,内存中就有了一个对象的实实在在的存在—实例
在这里插入图片描述

创建出来的对象叫做类的实例
创建对象的动作叫做实例化
对象的属性叫做实例属性
对象调用的方法叫做实例方法

每个对象都拥有自己独立的内存空间,保存各自不同的属性。多个对象的方法,在内存中只有一份,在调用方法时,需要把对象的引用传递到方法的内部。对象可以通过self.访问自己的属性或者调用自己的方法。

类是一个特殊的对象

定义的类属于类对象
通过类创建的对象属于实例对象

在python中,类是一个特殊的对象----类对象,在程序运行时同样会被加载到内存,并在内存中只有一份,使用一个类可以创建出很多对象实例。

除了 封装实例的属性和方法 外,类对象还可以拥有自己的属性和方法。
1、类属性
2、类方法

通过类名.的方式,可以访问类的属性或者调用类的方法。
在这里插入图片描述
类属性就是在类对象中定义的属性,通常用来记录与这个类相关的特征,不会用于记录具体对象的特征

在class下方,使用赋值语句,直接定义类属性。

# 使用赋值语句,定义类属性,记录用于创建工具对象的总数。
class Tool(object):
	count = 0
	
	def __init__(self, name):
		self.name = name
		Tool.count += 1


tool1 = Tool("斧头")
tool2 = Tool("锤子")
print("Tool.count")

在访问类属性的时候,使用的是类名.的方式,而不是self.

属性获取存在一个向上查找的机制,使用对象.类属性的方法,也能访问到类属性。但是不推荐这种方法。使用这种语句后,python会首先查找对象是否有这个属性,如果没有会向上访问类属性。

使用对象名.类属性 = 值 的赋值语句只会给对象创建一个属性,而不会影响类属性的值。

类方法

类方法就是针对类对象定义的方法,在类方法内部可以直接访问类属性,或者调用其他类方法。

类方法的定义语法如下:

@classmethod
def 类方法名(cls):
	pass

类方法的定义时需要加一个修饰器,@classmethod

类方法的第一个参数应该是cls

通过类名.调用类方法,调用时同样不需要传递cls参数

同实例方法一样,在方法内部:
可以通过cls.访问类属性
也可以通过cls.调用其他类方法

@classmethod
def tools_count(cls):
	print("总共有%d个工具" % cls.count)


Tool.tools_count()
静态方法

如果在开发过程中,需要封装一个方法,即不需要访问实例属性或者调动实例方法,也不需要访问类属性或者类方法,这个时候可以把这个方法封装成一个静态方法

语法如下:

@staticmethon
def 静态方法名():
	pass

同样,可以通过类名.调用静态方法。

@staticmethod
def run():
	print("小狗正在疯狂的跑")

这样可以通过类名.的方法直接调用,而不需要创建实例对象

综合应用:

# *-*coding:utf-8*-*


class Game(object):
    top_score = 0

    def __init__(self, name):
        self.name = name

    @staticmethod
    def show_help():
        print("这个游戏贼难玩")

    @classmethod
    def show_top_score(cls):
        print("最高分是%d" % cls.top_score)

    def start_game(self):
        print("%s开始游戏" % self.name)

xiaoming = Game("小明")
Game.show_help()
Game.show_top_score()
xiaoming.start_game()

运行结果:

这个游戏贼难玩
最高分是0
小明开始游戏

1、实例方法—方法内部需要访问实例属性
(实例方法内部可以使用类名.访问类属性)
2、类方法—方法内部只需要访问类属性
3、静态方法—方法内部,不需要访问实例属性和类属性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值