首页 > 代码库 > python\类

python\类

1 初始类

1 声明类 (和声明函数很相似)

类的定义格式

class 类名:

    ‘类的文档字符串‘

    类体

2 创建一个类:

class Data:

    pass

Python编程中习惯类名使用单数单词并且首字母大写

 

类是数据与函数的结合,二者称为类的属性

class Garen:        #定义英雄盖伦的类,不同的玩家可以用它实例出自己英雄;

    camp=‘Demacia‘  #所有玩家的英雄(盖伦)的阵营都是Demacia;

    def attack(self,enemy):   #普通攻击技能,enemy是敌人;

        enemy.life_value-=self.aggressivity #根据自己的攻击力,攻击敌人就减掉敌人的生命值。

2 类的作用1:属性引用

属性引用(类名.属性)

(1)引用类的数据属性(类名.变量名)

print(Garen.camp)   # 引用类的数据属性,该属性与所有对象/实例共享

输出结果为:

Demacia

 

(2)引用类的函数属性(类名.函数名)

print(Garen.attack)   #引用类的函数属性,该属性也共享

输出结果为:

<function Garen.attack at 0x00000059CE8FAF28>

 

(3)类的属性操作

 

Garen.name=‘Garen1‘    #增加属性

print(Garen.name)       #查询属性

输出结果为:

Garen1

 

del Garen.name         #删除属性

print(Garen.name)

输出结果为:

AttributeError: type object ‘Garen‘ has no attribute ‘name‘ #报错

 

Garen.camp="aaaa"      #修改属性

print(Garen.camp)

输出结果为:

aaaa

 

3 类的作用2:实例化

(1)__init__实例化

类名加括号就是实例化,会自动触发__init__函数的运行,可以用他来为每个实例定制自己的特性

class Garen:

    camp=‘Demacia‘

    def __init__(self,nickname,aggressivity=58,life_value=http://www.mamicode.com/455):

        self.nickname=nickname  #为自己的盖伦起个别名;

        self.aggressivity=aggressivity #英雄都有自己的攻击力;

        self.life_value=http://www.mamicode.com/life_value #英雄都有自己的生命值;

    def attack(self,enemy):

        print("attack %s" % enemy)

实例化:类名+括号

g1=Garen(‘草丛伦‘)

#就是在执行Garen.__int__(g1,’草丛伦’),然后执行__init__内的代码g1.nickname=’草丛伦’等

 

(2)self作用

self的作用是在实例化时自动将对象/实例本身传给__init__的第一个参数,self可以是任意名字,但是self是大家公认的。

 

这种自动传递的机制还体现在g1.attack的调用上,后续会介绍

 

一:我们定义的类的属性到底存到哪里了?有两种方式查看

dir(类名):查出的是一个名字列表

类名.__dict__:查出的是一个字典,key为属性名,value为属性值

 

二:特殊的类属性

类名.__name__# 类的名字(字符串)

类名.__doc__# 类的文档字符串

类名.__base__# 类的第一个父类(在讲继承时会讲)

类名.__bases__# 类所有父类构成的元组(在讲继承时会讲)

类名.__dict__# 类的字典属性

类名.__module__# 类定义所在的模块

类名.__class__# 实例对应的类(仅新式类中)

 

python\类