o3_封装,一个对象的属性,为另外一个对象.py
对象作为属性赋值给另外一个对象,
1 # Learner BM 2 """ 3 士兵突击(一个对象的属性,可以是另一个对象) 4 达到什么结果?? 5 6 Solider类 7 属性 : 8 name:='ak' 9 gun=(另一个类创建的对象) 10 方法: 11 初始化方法 12 fire方法 13 14 Gun类 15 属性: 16 model 型号 17 bull_count 子弹 18 方法: 19 初始化方法 20 装填子弹(count)子弹计数,判断子弹 21 发射方法shoot 22 哪个类要被使用,先开发那个类,本案例Gun类要被Solider使用,所以先开发Gun类 23 24 许三多的gun属性为gun类的实例实例名为ak47,实现许三多对象访问ak47对象的所有属性和方法 25 26 """ 27 # 定义Gun类 28 class Gun(): 29 # 初始化方法 30 def __init__(self,model,bull_count,): 31 # 枪的型号 32 self.model = model 33 # 枪的子弹数量,初始化 34 self.bull_count = bull_count 35 36 # 装填子弹方法 37 def add_bull(self): 38 # 每次装填10个子弹 39 print('枪有%s个子弹,装填了%s个子弹'%(self.bull_count,10)) 40 self.bull_count +=10 41 42 # 发射子弹方法 43 def shoot(self): 44 # 每次发射减少5个子弹 45 self.bull_count -=5 46 print('发射子弹,子弹减少了%s个,还剩余%s个子弹' %(5,self.bull_count)) 47 class Soldier(): 48 # 初始化方法 49 def __init__(self,name): 50 self.name = name 51 # 属性若为初始值需待定,可以设置None 52 self.gun = None 53 # 开火方法 54 def fire(self): 55 print('发射子弹') 56 # 访问到gun的属性好方法 57 print(xusanduo.gun.bull_count) 58 # 调用gun对象的装填子弹方法 59 xusanduo.gun.add_bull() 60 # 调用gun对象的发射方法 61 xusanduo.gun.shoot() 62 63 def move(self): 64 print('我在移动拿着%s移动' % xusanduo.gun.model ) 65 66 # 创建实例枪 67 ak47 = Gun('Ak47',10) 68 #ak47.add_bull() 69 #ak47.shoot() 70 # 创建士兵的实例 71 xusanduo = Soldier('许三多') 72 # 许三多的gun属性为gun类的实例实例名为ak47,实现许三多对象访问ak47对象的所有属性和方法 73 xusanduo.gun = ak47 74 xusanduo.move() 75 # 通过调用士兵的fire方法,实现扩展到调用gun的属性好方法 76 xusanduo.fire() 77 78 79 #print(xusanduo.gun.model)

o4_封装里是私有属性和私有方法.py
1 # Learner BM 2 """ 3 既然一个类的对象(实例)可以作为参数,以及作为属性传递,赋值给另外一个对象(实例),实现方法和属性的跨类调用, 4 如果什么属性和方法都能被其他类跨类调用数据安全得不到保障,这时候就需要对类中的属性或方法作出限制, 5 使得类内部中部分数据让外界无法访问,此时就需要用到 私有属性和私有方法 (属性和方法名前加上 '__' 双下划线) 6 7 属性和方法一旦被私有化后,只能在类的内部访问,外界无法访问 8 9 私有属性的定义 10 __age = 28 11 12 私有属性的访问(因为只能在对象的内部访问,所以使用self关键字) 13 self.__age 14 """ 15 16 # 定义一个女人类 17 class Women(): 18 def __init__(self,name): 19 self.name =name 20 # 私有属性,仅在对象内部能够被访问,外界无法访问 21 self.__age = 18 22 self.weight = 45 23 24 def womenInfo(self): 25 # 私有属性__age,访问时也需要加上'__',只能在对象内部进行操作 26 return print('%s的体重是%s,年龄是%s' %(self.name,self.__age,self.weight) ) 27 28 # 定义一个男人类 29 class Men(): 30 def __init__(self,name): 31 self.name =name 32 33 def love(self,women): 34 print('%s喜欢的对象名字叫做%s' % (self.name,women.name)) 35 # __age书屋women对象的私有属性,无法直接访问,可以通过调用womeninfo方法间接访问 36 # print('%s的年龄是' % (women.__age)) 37 print('%s的的体重是%s' % (women.name,women.weight)) 38 # 创建女人对象 39 xiaomei=Women('小美') 40 # 外界访问小美的私有年龄方法,无法执行 41 # (xiaomei.__age) 42 print('类外界访问私有属性输出的小美的年龄,不建议使用' ,xiaomei._Women__age) 43 # 调用女人身份信息的方法 44 #xiaomei.womenInfo() 45 # 创建男人 46 xiaoming =Men('小明') 47 # 调用男人的love方法,传入女人对象xiaomei,使love方法内部能够访问women的属性和方法, 48 # 但是由于__age属于私有属性,无法访问 49 xiaoming.love(xiaomei) 50 51 """ 52 python中没有真正意义的私有, 53 开发中,私有属性和私有方法不要轻易访问 54 对象._类名__(属性或者方法) 55 对象._Women__age,参见 56 """
浙公网安备 33010602011771号