1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > python类的实例方法必须创建对象后_Python3 类方法 实例方法 静态方法详解...

python类的实例方法必须创建对象后_Python3 类方法 实例方法 静态方法详解...

时间:2023-05-16 17:46:52

相关推荐

python类的实例方法必须创建对象后_Python3  类方法 实例方法 静态方法详解...

类对象和实例对象

类:Python中一切皆为对象,对象是抽象的,Python中的对象用类来表示。而在实示使用时,通常会找到类具体的存在。

在 Python 中,类 是一个特殊的对象 —— 类对象。

在程序运行时,类对象 在内存中 只有一份,使用 一个类可以创建出 很多个对象实例。

例如:

class AAA: #定义的类AAA属于 类对象

类对象拥有自己的属性 和 方法 即:类属性、类方法

实例对象: 某一个具体事物的存在,使用 类名() 创建。对象创建后,内存中就有了对象的一个实实在在的存在 ,即实例。

创建对象的动作分为两步:

1).在内存中为对象 分配空间

2).调用初始化方法 init 为 对象初始化

例如:

obj1 = AAA() #obj1属于 实例对象

针对实例,通常有以下说法:

1)通过类创建出来的 对象 叫做 类的实例

2)创建对象的动作 叫做 实例化

3)对象的属性 叫做 实例属性

4)对象调用的方法 叫做 实例方法

在程序执行时实例对象,实例对象拥有独立的内存空间,保存各自不同实例属性。调用实例对象方法,可以通过 self.访问自己的属性,self.调用自己的方法

类属性和类方法

类属性直接定义在类的内部,方法的外部。它被所有类对象的实例对象所共有。

类方法,定义时使用@classmethod装饰器。告诉解释器这是一个类方法。

类方法的 第一个参数 是 cls,是指由 哪一个类 调用的方法,方法内的 cls 就是 哪一个类的引用。调用类方法时,不需要传递 cls 参数。

类的内部调用类属性、类方法,格式为:

类名.类属性

类名.类方法

类的外部调用类属性、类方法,格式为:

类名.类属性

类名.类方法

实例名.类属性

实例名.类方法

class cumputer(object):

count = 0 #定义类属性

def __init__(self,name):

self.name = name

cumputer.count +=1

print(cumputer.count) #打印类属性的值 输出 0

c = cumputer('ThinkPad')

print(c.count) #实例对象调用类属性 输出 1

class person(object):

number = 0

def __init__(self,account):

self.account = account

person.number +=1

@classmethod

def show_person_number(cls):

print("人类对象的数量%d " %person.number)

p1 = person('Jenny')

p1.show_person_number() #输出:人类对象的数量1

p2 = person('amy')

p2.show_person_number() #输出:人类对象的数量2

实例属性和实例方法

实例方法的第一个参数必须是”self”,实例方法只能通过类实例对象进行调用,“self”就代表这个类实例本身。通过”self”可以直接访问实例的属性。

实例方法不需要添加装饰器。

实例属性,通常在初始化方法中 以 self.属性名 的格式创建。实例属性就相当于局部变量。出了这个类或者这个类的实例对象,就没有作用了。

class Person():

name = '小花'

def __init__(self):

self.age = 10

def print_age(self):

print(f"{Person.name}的年龄为:{self.age}")

person1 = Person()

print(person1.age)#输出:10

person1.print_age()#输出: 小花的年龄为:10

静态方法

在开发过程中,如果需要在 类 中封装一个方法,这个方法:

既 不需要 访问 实例属性 或者调用 实例方法

也 不需要 访问 类属性 或者调用 类方法

此时,可以把这个方法封装成一个 静态方法

静态方法 需要用 修饰器 @staticmethod 来标识,告诉解释器这是一个静态方法

通过: 类名. 调用 静态方法

class Person():

tel = '15000001111'

@staticmethod

def print_tel():

print(f"{Person.tel}")

person = Person()

person.print_tel() #15000001111

Person.print_tel() #15000001111

综合实例

class Game(object):

score = 0

def __init__(self,player):

self.player = player

@staticmethod

def help_info():

print("帮助信息: 注册后查看帮助可快速上手....")

@classmethod

def show_score(cls):

print(f"历史最高成绩是{Game.score}")

def start_game(self):

print(f"{self.player}正在开启游戏....")

#调用静态方法,查看帮助信息

Game.help_info()

#调用类方法,查看历史最高成绩

Game.show_score()

g = Game('aaa')

#调用实例方法,开启游戏

g.start_game()

小结:

类方法 —— 第一个参数是类对象cls,那么通过cls引用的必定是类对象的属性和方法;

实例方法 —— 第一个参数是实例对象self,那么通过self引用的可能是类属性、也有可能是实例属性,若存在相同名称的类属性和实例属性的情况下,实例属性优先级更高;

静态方法 —— 不需要额外定义参数,不需要访问 实例属性 和 类属性。因此在静态方法中引用类属性的话,必须通过类对象来引用。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。