社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  python开源

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

夏天 • 6 年前 • 923 次点击  

一、类属性与类方法

在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
 
923 次点击