python之面向对象之类变量和实例变量
2024-10-19 01:30:22
#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
最新文章
- C# Winform 通过FlowLayoutPanel及自定义的编辑控件,实现快速构建C/S版的编辑表单页面
- ld: framework not found AGCommon 关于三方库到入 问题解决方案!!
- java之Class类详解
- Android Studio系列教程二--基本设置与运行
- mui
- Linux下如何查找可执行文件
- hdu 1538 A Puzzle for Pirates 博弈论
- SignalR发布后不能生成signalr/hubs
- as3.0服务端FMS软件常用的方法与属性参考示例
- 【Xamarin挖墙脚系列:Xamarin的核心】
- Fluent-EDEM耦合计算颗粒流动
- iOS 8 自动布局sizeclass和autolayout的基本使用
- hdu1254(bfs+dfs)
- linux 在系统启动过程
- Spring Boot Document Part I
- JavaWeb学习笔记八 监听器
- asp.net处理机制管道事件
- python3 进行字符串、日期、时间、时间戳相关转换
- 字符串拼接引发的BUG
- [Model] AlexNet
热门文章
- Leetcode 之Simplify Path @ python
- 绕过限制,在PC上调试微信手机页面
- 可以ping通ip地址,但是访问80,或者8080报错
- Web 数据源
- 并发基础(七) Thread 类的sleep()、yeild()、join()
- Linux开机挂载windows共享文件夹
- Caused by: java.lang.IllegalStateException: Expected raw type form of org.springframework.web.servlet.handler.AbstractHandlerMethodMapping$Match
- as3 TweenMax TweenLite方法
- ABAP-TXT文件上传
- 没有装delphi软件则须修改程序的Uses单元,去掉QDialogs qtintf.dll