美文网首页
Python3 & 类方法,实例方法,静态方法详解

Python3 & 类方法,实例方法,静态方法详解

作者: 乘风破浪的姐姐 | 来源:发表于2020-12-02 18:16 被阅读0次

类对象和实例对象

类: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引用的可能是类属性、也有可能是实例属性,若存在相同名称的类属性和实例属性的情况下,实例属性优先级更高;
静态方法 —— 不需要额外定义参数,不需要访问 实例属性 和 类属性。因此在静态方法中引用类属性的话,必须通过类对象来引用。

相关文章

网友评论

      本文标题:Python3 & 类方法,实例方法,静态方法详解

      本文链接:https://www.haomeiwen.com/subject/zvpywktx.html