所谓指针:当实例化生成对象时,会产生一个对象指针,存在对象名称空间. 用于指向类空间
class A(): class_attr='123' def __init__(self,name):#实例化过程自动执行__init__方法,给对象封装属性,还封装一个类对象指针 self.name=name a=A() #实例化对象 a a.class_attr # a是对象的名称空间,不存在class_attr属性. 这时类对象指针指向类名称空间,类名称空间存在class_attr属性.a对象就能获得class_attr属性. #总结: # 类对象指针就是存在对象中,用于指向回生成对象的这个类. 对象查找属性的顺序:先从对象空间------> 类空间------> 父类空间
类名查找属性的顺序:先从本类空间-------> 父类空间
依赖关系 (主从关系) 将一个类的类名,或者对象传给另一个类的方法中
class Elephant(): def __init__(self, name): self.name = name def open(self, ref): # 依赖关系, ref是形参,接收另一个类生成的对象 print(f'{self.name}?象 要 开门') ref.open_door() # ref是一个对象.可以调用这个对象内包含的一切,通过.的方式 def close(self, ref): # 依赖关系, ref是形参,接收另一个类生成的对象 print(f'{self.name}?象 要 关门') ref.close_door() # ref是一个对象.可以调用这个对象内包含的一切,通过.的方式 class Fridge(): def __init__(self, name): self.name = name def open_door(self): print(f'{self.name} 冰箱门被打开了...') def close_door(self): print(f'{self.name}冰箱门被关上了') ele = Elephant('QQ') #实例化一个对象 ref = Fridge('美菱') # 实例化一个对象 ele.open(ref) # 依赖关系, ref 是另一个类生成的对象 传给了ele对象的open方法 ele.close(ref) # 同上 将一个类的对象,封装成另一个类实例化后的对象的属性
class Boy: def __init__(self, name): self.name = name def meet(self, girl_friend=None): self.girl_friend = girl_friend # 组合,把g1对象封装为b1对象的属性 print(girl_friend) # 女孩类生成对象的内存地址 <__main__.Gril object at 0x000001975E844630> def have_dinner(self): if self.girl_friend: print(f'{self.name} 请女朋友{self.girl_friend.name}吃饭') print(f'{self.name} 的女朋友年龄是{self.girl_friend.age}') self.girl_friend.shopping(self) # 回传.g1对象中也可调用b1对象的一切 else: print('没有女的 .不吃饭') class Gril: def __init__(self, name, age): self.name = name self.age = age def shopping(self,wu): print(f'{self.name} 和 {wu.name} 一起去购物') b1 = Boy('赵四') g1 = Gril('李柳柳', 45) b1.meet(g1) # 组合 将一个类的对象,封装成另一个对象的属性 b1.have_dinner() ### 总结 ### 一个类的方法只能有此类的对象去调用 ### 一个类的方法的第一个self只接收此类的对象转载于:https://www.cnblogs.com/dengl/p/11152439.html
相关资源:JAVA上百实例源码以及开源项目