#Auther Bob
#--*--conding:utf-8 --*-- #这里的变量全部都是实例变量
class Role(object):
def __init__(self,name,role,wepon,life_value):
#实例变量
self.name = name
self.role = role
self.wepon = wepon
self.life_value = life_value
#类的方法
def buy_gun (self,wepon):
print("我的名字是[%s],我的角色是[%s],我新买了一把枪[%s],我剩下[%s]滴血" %(self.name,self.role,wepon,self.life_value))
self.wepon = wepon p1 = Role("p1","Police","B10","10")
print(p1.wepon)
p1.buy_gun("C10")
print(p1.wepon) # B10
# 我的名字是[p1],我的角色是[Police],我新买了一把枪[C10],我剩下[10]滴血
# C10 print("-".center(100,"-"))
#这里的变量有实例变量和类变量
class Role(object):
#这里的nat就是类变量
nat = None
def __init__(self,name,role,wepon,life_value):
#这里的变量都是实例变量
self.name = name
self.role = role
self.wepon = wepon
self.life_value = life_value
def buy_gun (self,wepon):
print("我的名字是[%s],我的角色是[%s],我新买了一把枪[%s],我剩下[%s]滴血" %(self.name,self.role,wepon,self.life_value))
self.wepon = wepon
# print(nat) 这样会报错的,因为nat这个变量是类的变量,不是实例的变量
print(self.nat)
p1 = Role("p1","Police","B10","10")
t1 = Role("t1","Terror","B11","11") print("xxxxxxxxxxxxxxxxxxxxxxxx")
print(p1.nat)
# None p2 = Role("p2","Police","B10","10")
t2 = Role("t2","Terror","B11","11") p1.buy_gun("C10")
# 我的名字是[p1],我的角色是[Police],我新买了一把枪[C10],我剩下[10]滴血
# None
t1.buy_gun("C11")
# 我的名字是[t1],我的角色是[Terror],我新买了一把枪[C11],我剩下[11]滴血
# None print("-".center(100,"-"))
print("p1---->",p1.name,p1.nat,sep="|")
# p1---->|p1|None print("t1---->",t1.name,t1.nat,sep="|")
# t1---->|t1|None print("-".center(100,"-"))
#对实例中的nat变量重新赋值,相当于在新增1个实例变量nat
p1.nat = "China"
t1.nat = "USA"
print("p1---->",p1.name,p1.nat,sep="|")
print("t1---->",t1.name,t1.nat,sep="|")
print("p2---->",p2.name,p2.nat,sep="|")
print("t2---->",t2.name,t2.nat,sep="|") # p1---->|p1|China
# t1---->|t1|USA
# p2---->|p2|None
# t2---->|t2|None print("-".center(100,"-"))
#这里我们对类变量进行赋值,但是只影响类变量nat,而不影响实例变量中的nat
Role.nat = "Eng"
print("p1---->",p1.name,p1.nat,sep="|")
print("t1---->",t1.name,t1.nat,sep="|")
print("p2---->",p2.name,p2.nat,sep="|")
print("t2---->",t2.name,t2.nat,sep="|") # p1---->|p1|China
# t1---->|t1|USA
# p2---->|p2|Eng
# t2---->|t2|Eng print("-".center(100,"-"))
# print(Role.wepon)
#这里会报错,因为Role中其实没有wepon这个变量,因为wepon这个变量是实例的变量,而不是类的变量,所以这里会报错
Role.nat = "XXXX"
Role.wepon = "YYYY"
print(Role.wepon)
#这里为什么可以执行成功呢,其实这里的wepon和实例的中的wepon是不是一个变量,Role.wepon = "YYYY"这个给类重新定义了一个wepon这个变量,这个变量也是类的变量,而不是实例中的变量
#所以这里改了wepon的值,实际给类的wepon定义了,但是根本就不会影响实例中的wepon的值
print("p1---->",p1.name,p1.nat,p1.wepon,sep="|")
print("t1---->",t1.name,t1.nat,t1.wepon,sep="|")
print("p2---->",p2.name,p2.nat,p2.wepon,sep="|")
print("t2---->",t2.name,t2.nat,t2.wepon,sep="|") # p1---->|p1|China
# t1---->|t1|USA
# p2---->|p2|Eng
# t2---->|t2|Eng print("-".center(100,"-"))
#这里我们定义了一个类变量nat,在实例中我们根本就没有定义nat这个变量,其实这里的原理是这样的,这里的访问和赋值处理的变量其实是不一样的
#在实例中,如果我们去访问类变量nat,因为我们的实例中并没有这个变量,所有这里的访问是访问的类的变量
#在实例中,如果我们去重新赋值给nat,那么其实就是给这个实例新增加了一个实例变量nat class Role(object):
#这里的nat就是类变量
nat = None
def __init__(self,name,role,wepon,life_value):
#这里的变量都是实例变量
self.name = name
self.role = role
self.wepon = wepon
self.life_value = life_value
#这个是类的方法
#self是实例本身
def buy_gun (self,wepon):
print("我的名字是[%s],我的角色是[%s],我新买了一把枪[%s],我剩下[%s]滴血" %(self.name,self.role,wepon,self.life_value))
self.wepon = wepon
print(self.nat) #这里就打印的就是类的变量nat
self.nat = "France"
print(self.nat) 2b = Role("2b","Teacher","B51","1000")
2b.buy_gun("B52")
# 我的名字是[2b],我的角色是[Teacher],我新买了一把枪[B52],我剩下[1000]滴血
# None
# France

  

python之面向对象之类变量和实例变量的更多相关文章

  1. Python - 面向对象编程 - 类变量、实例变量/类属性、实例属性

    什么是对象和类 https://www.cnblogs.com/poloyy/p/15178423.html 什么是 Python 类.类对象.实例对象 https://www.cnblogs.com ...

  2. python中类变量和实例变量

    1. 类变量和实例变量 在Python Tutorial中对于类变量和实例变量是这样描述的: Generally speaking, instance variables are for data u ...

  3. (转)java线程安全问题之静态变量、实例变量、局部变量

    java多线程编程中,存在很多线程安全问题,至于什么是线程安全呢,给出一个通俗易懂的概念还是蛮难的,如同<java并发编程实践>中所说: 写道 给线程安全下定义比较困难.存在很多种定义,如 ...

  4. iOS 成员变量,实例变量,属性变量的区别,联系

    在ios第一版中: 我们为输出口同时声明了属性和底层实例变量,那时,属性是oc语言的一个新的机制,并且要求你必须声明与之对应的实例变量,例如: 注意:(这个是以前的用法) @interface MyV ...

  5. Java中静态变量与实例变量

    知识回顾 上一篇总结了java中成员变量和局部变量的区别,这一篇将总结静态变量和实例变量的一些特性和区别. 示例代码 package Variable; public class VariableDe ...

  6. ios -- 成员变量、实例变量与属性的区别

      最近打开手机就会被胡歌主演的<猎场>刷屏,这剧我也一直在追,剧中的郑秋冬,因为传销入狱五年,却在狱中拜得名师孙漂亮(孙红雷),苦学HR,并学习了心理学,成功收获两样法宝.出狱后因为怕受 ...

  7. java线程安全问题之静态变量、实例变量、局部变量

    java多线程编程中,存在很多线程安全问题,至于什么是线程安全呢,给出一个通俗易懂的概念还是蛮难的,如同<java并发编程实践>中所说: 写道 给线程安全下定义比较困难.存在很多种定义,如 ...

  8. Java的类成员变量、实例变量、类变量,成员方法、实例方法、类方法

    总是被这些相似的概念搞晕,查阅了资料后做个小总结,以变量为例,方法辨析类似. 1.多胞胎名字汇总辨析 成员变量和成员方法是范围最大的定义,提到成员变量就可以理解成你所定义在一个类体中的各类变量的统称, ...

  9. 成员变量(实例变量)&局部变量&静态变量(类变量)的区别

    成员变量(实例变量)&局部变量区别: (1)作用域 成员变量:针对整个类有效. 局部变量:只在某个范围内有效.(一般指的就是方法,语句体内) (2)存储位置 成员变量:随着对象的创建而存在,随 ...

随机推荐

  1. 亚马逊云EC2做PPTP SERVER的笔记

    1.在亚马逊控制台上启动实例 2. 3. 4. 5. 6.配置安全组,把你的IP开放所有流量. 7. 用你自己的亚马逊KEY或者生成一个新的KEY来登录EC2 8.开始搭建VPN-PPTP——how ...

  2. Jquery_artDialog对话框弹出

    artDialog是一个基于javascript编写的对话框组件,它拥有精致的界面与友好的接口l  自适应内容artDialog的特殊UI框架能够适应内容变化,甚至连外部程序动态插入的内容它仍然能自适 ...

  3. Tcprstat测试mysql响应时间

    Tcprstat测试mysql响应时间 一.tcprstat工具安装与使用 tcprstat 是一个基于 pcap 提取 TCP 应答时间信息的工具,通过监控网络传输来统计分析请求的响应时间. 使用方 ...

  4. Android:手把手教你打造可缩放移动的ImageView(下)

    在上一篇Android:手把手教你打造可缩放移动的ImageView最后提出了一个注意点:当自定义的MatrixImageView如ViewPager.ListView等带有滑动效果的ViewGrou ...

  5. 学习MongoDB 三: MongoDB无法启动的解决方法

    一简介 我们之前介绍了MongoDB入门(安装与配置),我们今天在打开MongDB时,我们先运行cmd.exe进入dos命令界面,然后进入cd  D:\mongodb\bin目录下,启动服务或者mon ...

  6. nodejs——发送邮件(带附件)

    用到的包是 nodemailer,简单,有效. 1.auth 中的 pass,是指“邮箱第三方登录授权码”,如何获取授权码,以QQ邮箱为例,请点击:http://jingyan.baidu.com/a ...

  7. flask框架预备知识

    1.web预备知识 2.flask介绍 3.web框架的本质及分类 4.flask安装与基本设置 1.web预备知识 HTTP协议:https://www.cnblogs.com/wyb666/p/9 ...

  8. 代码:cookie(一个广告展示例子)

    这个小例子的要求是: 用户第一次进入,显示大图,2秒后大图动画关闭,再把小图动画展开: 用户再次进入后,只显示静态小图. 做法: 定义一个容器 .img201512ad,宽高写死:1190x70.—— ...

  9. 比较完整的URL验证

    转自:http://wuchaorang.2008.blog.163.com/blog/static/4889185220135279223253/ function IsURL(str_url){v ...

  10. leetcode237

    /** * Definition for singly-linked list. * public class ListNode { * public int val; * public ListNo ...