类的结构
实例的概念
在面向对象开发的时候,第一步是设计类,然后用类名()创建对象,创建对象的动作有两步:
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、静态方法—方法内部,不需要访问实例属性和类属性
本文介绍了Python中的类结构,包括实例、类对象和对象实例化的概念。详细阐述了实例属性、类属性、类方法和静态方法的区别与用法。实例属性与对象相关,每个对象都有独立的内存空间;类属性属于类对象,可以在类或对象上调用;类方法以`@classmethod`修饰,用于操作类属性;静态方法不依赖实例或类属性,以`@staticmethod`修饰。
3138

被折叠的 条评论
为什么被折叠?



