Python 类的特性讲解
类的特性讲解 |
类的特性
#定义一个类, class是定义类的语法,Role是类名, (object)是新式类的写法,必须这样 写,以后再讲为什么 class Role(object): #初始化函数,在生成一个角色时要 初始化的一些属性就填写在这里 def __init__(self,name,role,weapon,life_value=100,money=15000): #__init__中的第一个参数self,和这里的self都 是什么意思? 看下面解释 self.name = name self.role = role self.weapon = weapon self.life_value = life_value self.money = money def shot(self): print("%s is shooting..."%self.name) def got_shot(self): print("ah...,I got shot...") def buy_gun(self,gun_name): print("%s just bought %s" %(self.name,gun_name)) self.weapon = gun_name #将weapon定义到gun_name r1 = Role('Alex','police','AK47') #生成一个角色 r2 = Role('Jack','terrorist','B22') #生成一个角色 r1.shot() r2.buy_gun("B46") print(r2.weapon)
类-->实例化--->实例对象
__init__构造函数
self.name = name #属性,成员变量,字段
def sayhi() #方法,动态属性
方法介绍
def sayhi()方法是公有的,对象会将内存下的数据访问类内存
中的数据,不会产生在r1的内存中。
1.方法模块转化私有的方法
class Role(object): nationality = "JP" def __init__(self,name,role,weapon,): self.name = name self.role = role self.weapon = weapon def shot(self): print("%s is shooting..."%self.name) def shot(self): print("%s run my own shot method"%self.name) r1.shot() r1.shot = shot #替换为全局变量的shot, r1.shot(r1) #全局变量需要加上对象名 r2.shot() #Alex is shooting... #Alex run my own shot method #Jack is shooting...
公有属性
成员属性
class Role(object): def __init__(self,name,role,weapon,life_value=100,money=15000): self.name = name #注: self.name = name 不是公有属性,则是对象的成员属性。
公有属性
class Role(object): nationality = "JP" #注:在类里定义的属性nationality = "JP",是公有属性
更改类的公有属性
class Role(object): nationality = "JP" def __init__(self,name,role,weapon,): self.name = name self.role = role self.weapon = weapon self.__heart = "Normal" r1 = Role('Alex','police','AK47') #生成一个角色 r2 = Role('Jack','terrorist','B22') #生成一个角色 #对象r1单个修改公有属性 # r1.nationality = "US" # print(r1.nationality) # print(r2.nationality) #US #JP #全局修改公有属性 # Role.nationality = "China" # print(r1.nationality) # print(r2.nationality) #China #China
原理
对象实例化后,获取到公有属性,全局属性,r1如果修改了单个共有
属性,则会将命名为r1内存下创建改公有属性变量,再次获取时会优
先访问r1内存下的公有属性,则是局部变量。(列图)
私有属性
self.__private_attr_name = value #只能内部访问,外部不可访问。
1.对外部提供只读访问接口。
def get_heart(self): reture self.__heart
2.强制访问私有属性。
r1._Role(r1对象所属类名)__heart (属性值)