Py学习  »  python开源

Python学习总结(五)类属性、类方法、self、cls

夏天 • 7 年前 • 1052 次点击  

一、类属性与类方法

在Python中,一切皆对象。

class AAA:定义的类属于类对象——类也是特殊的对象!

obj1 = AAA()属于实例对象

类对象拥有自己的属性和方法。

Python学习交流qq群 302521268 多多交流问题,互帮互助,群里有不错的学习教程和开发工具。学习python有任何问题(学习方法,学习效率,如何就业),可以随时来咨询我

类属性

类属性 就是给 类对象 定义的属性

通常用来记录与这个类相关的特征

不会用于记录具体对象的特征

一个实例

class Weapon(object):

count = 0  # 用来记录这个类创建了多少对象



def __init__(self, name):

    self.name = name

    Weapon.count += 1  # 使用 类名.count 的方式访问

wp1 = Weapon("刀枪剑戟")

wp2 = Weapon("斧钺钩叉")

wp2.count = 99 # 设置属性值而非读取

print(Weapon.count) # 因此这里类属性依旧不变,值为2

注意:使用类名.属性的方式访问类属性。

类方法(@classmethod)

语法:

类方法前面需要用修饰器@classmethod告诉解释器这是一个类方法

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

可以使用cls.访问类属性

class AAA(object):

@classmethod

def func(cls):

    pass

一个实例

class Weapon(object):

count = 0



def __init__(self, name):

    self.name = name

    Weapon.count += 1



@classmethod  # 这里必须有修饰器,告诉解释器这是一个类方法

def get_count(cls):

    return cls.count

wp1 = Weapon("刀枪剑戟")

wp2 = Weapon("斧钺钩叉")

print(Weapon.get_count())

二、静态方法(@staticmethod)

static:静态

需要使用修饰器@staticmethod让解释器知道这是静态方法

作用与使用细节:

如果一个方法只是起到输出固定信息等作用,则使用静态方法

静态方法无需传递参数

class AAA(object):

@staticmethod

def func():

    pass

一个实例

设计一款游戏,如下环节与对应方法

记录游戏最高分——类属性

记录当前玩家信息——实例属性

输出版本信息、帮助——静态方法

输出历史最高分——类方法

开始当前玩家的游戏——实例方法

Python中的 self 和 cls

测试代码:

class A(object):

def __init__(self):

    self.name = "xiaoming"

    self.num = None



def get_self(self):

    return self



@classmethod

def get_cls(cls):

    return cls



def get_super(self):

    return super()

cc = A()

dd = A()

print(cc.get_self() is dd.get_self()) # False 证明self是实例对象

print(cc.get_cls() is dd.get_cls()) # True 证明同一类中cls只有一个,cls是类对象

通过测试发现,无论创建了多少实例,它们的 self 均是不同的,而它们的 cls 总相同。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/29465