注意:本章笔记代码模块中的__,部分场景由于显示问题,将双下划线连接在一起,实际上为双下划线(编译环境中显示样式:_ _)
- 类方法
- 直接属于类
- 类方法不可使用实例变量(参数标识符是cls,而不是self)
- 类方法不可调用实例方法
- 外部直接调用类属性(计数使用方便,但普通方法也可实现)
- 类方法示例:
class Game:
classgametype = 'FPS'
def __init__(self,formgametype): #设置外部数据传入实例属性的入口,形参formgametype
self.gametype = formgametype #设置实例的一个属性gametype,并传入外部数据
def Gametype(self): #打印实例属性定义的gametype的方法
print('实例属性定义的游戏类型是:', self.gametype)
# 类方法语句模块------------------------------------------------------------------------
@classmethod # 类方法声明,声明这个方法是类方法
def Gametypeclass(cls): #方法变量名为当前通用标识符为cls,此处可替换为类名Game
print('类属性定义的游戏类型是:', cls.classgametype) #调用当前类属性classgametype
# ---------------------------------------------------------------------------------
wzry = Game('MOBA') # 外部数据通过形参导入实例属性
wzry.Gametype() # 打印实例属性定义的Gametype
wzry.Gametypeclass() # 打印类属性定义的Gametype
# 输出结果:
# 实例属性定义的游戏类型是:MOBA
# 类属性定义的游戏类型是:FPS
- 类方法统计实例化个数,示例:
class Game:
num = 0 # 计数记录
def __init__(self,formgametype):#设置外部数据传入实例属性的入口,形参formgametype
self.gametype = formgametype #设置实例的一个属性gametype,并传入外部数据
Game.num += 1 # 每实例化一次后,num+1,可用_ _class_ _.num替换,方便修改
@classmethod
def numcount(cls): # 注意括号内为cls,表示当前类
print('一共实例化', cls.num, '个实例') # 直接调用类属性
wzry = Game('MOBA')
jdqs = Game('FPS')
Game.numcount() # 调用类Game中的方法numcount
# 输出结果:
# 一共实例化了2个实例
- 类中访问权限控制
- @property:将方法变成属性,访问方式改变,方法必须有返回值,因为是属性
- 原,访问方式:class.method()
- 使用@property后,访问方式:class.method
- class内部私有方法:前置双下划线def _ _methodname(self)
- 表示仅class内部可访问,class外不可访问,_ _表示隐藏符号
- 用_ _后,class内部调用标识符为._ _parameter,不是.parameter
- class内部私有变量:前置双下划线self._ _parameter
- @property:将方法变成属性,访问方式改变,方法必须有返回值,因为是属性
# 无限制访问
class School:
area = 'China'
def __init__(self,formpnum):
self.pnum = formpnum
HKU = School(1000)
print(HKU.pnum)
# 打印得到 1000
# --------------------------------------------------------------------------------
# _ _设置class内部访问权限后
class School:
area = 'China'
def __init__(self,pnum):
self.__pnum = pnum # 限制class内部访问权限
HKU = School(1000)
print(HKU.__pnum)
# 打印得到:
# AttributeError: 'School' object has no attribute 'pnum'
# 属性错误:'School'对象没有'pnum'属性
# --------------------------------------------------------------------------------
class School:
area = 'China'
def __init__(self,pnum):
self.__pnum = pnum # 限制class内部访问权限
# 以下语句涉及的过程有:建立打印私有变量 self.__pnum的解决办法,将方法变为类属性的过程
@property
def getpnum(self):
return self.__pnum
HKU = School(1000)
print(HKU.getpnum)
# 打印得到 1000
- 构造函数
- 基本知识
- 构造实例的进程函数
- 语法 : def _ _init_ _(self)
- self表示当前实例,不可缺少
- 不能设置return值
- class执行当前实例的函数
- 参数传递
- 基本知识
# self 表示当前实例!!!!!!!!
class Game:
gametype = 'FPS' # 类属性,验证这个功能时可以略去
systemtype = 'mobile game' # 加入可观察验证仅访用机制
# self 表示当前实例!!!!!!!!
def __init__(self,sgametype,ssystem): # 定义参数(外部数据)传入入口
self.gametype = sgametype # 设置实例的第一个属性gametype
self.systemtype = ssystem # 设置实例的第二个属性systemtype
# self 表示当前实例!!!!!!!!
wzry = Game('MOBA','PC') # 实例化语句,传入参数(外部数据)给实例属性
print(wzry.gametype, wzry.systemtype) # 打印实例wzry的两个属性
print(wzry.__dict__) # 检验实例字典,结果说明参数成功传入实例,并保存在实例dict里
- 构造函数内的参数调用
- eg.
- Y参数传入构造函数,其他方法也可以调用Y参数, 语法:self.parameter
class Game:
def __init__(self, sgametype): # 定义形参Y:sgametype
self.gametype = sgametype
def printgametype(self):
print('这个游戏的类型是:', self.gametype) # self.xxx调用Y参数
wzry = Game('MOBA') # 实例化,并传入形参的内容
wzry.printgametype() # 实例调用类方法
# 输出结果:这个游戏的类型是 MOBA
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)