# ### 类的封装性 ''' 公有的,在类外可以调用类的相关共有属性方法 私有的(前面开头加上__ 两个下划线),在外类不可以调用类内的相关私有属性方法 绑定方法: (1) 绑定到对象 (默认系统把对象当成参数传递) (2) 绑定到类 (默认系统把类当成参数传递) 这两个参数,无论哪种,都是系统自己传递的, 但是参数需要我们自己定义好 ''' class Car(): # 公有属性 logo = "特斯拉" # 私有属性 __oil = "2.5L" # 公有方法 def run(self): print("我的小车会跑") def jiao(self): print("我的%s小车会滴滴滴的叫" % (self.logo)) # 私有方法 def __oil_info(self): print("这是我的私有方法") # 实例化对象 obj = Car() print(obj) # 对象的相关操作 # (1)实例化的对象访问公有成员属性和方法 ''' 对象.属性 对象.方法() ''' # 调用公有成员属性 print(obj.logo) # print(obj.__oil) # 私有的无法在类外调用 # 调用公有成员方法 ''' 系统自己会默认的把obj这个对象当成参数进行传递 传递给run这个方法,用self这个参数进行接收 self 这个词约定俗称这么写,是自定义的,代表本对象. ''' obj.run() obj.jiao() # obj.__oil_info() error 私有的不能够在类外调用 # (2)实例化的对象动态添加公有成员属性 obj.color = "屎黄色" print(obj.color) # 查看obj这个对象的内部成员,使用__dict__ print(obj.__dict__) """ 类中得成员属性和方法可以给对象使用, 但是只有使用权,没有归属权, 类里面的成员属性方法只归类所有, 对象只能使用(获取) 不能够修改或者删除. 不归对象所有 """ # 实例化的对象动态添加公有成员属性方法 # (1) 添加无参方法 def func(): print("我的汽车会变形,请叫我大黄蜂") # 把func方法赋值给成员方法bianxing obj.bianxing = func obj.bianxing() print(obj.__dict__) # (2) 添加有参方法 def qingtianzhu(name): print("请叫我"+name) obj.qingtianzhu = qingtianzhu obj.qingtianzhu("擎天柱") # 改造1 def qingtianzhu(self,name): print("请叫我"+name,"我的颜色是"+self.color) obj.qingtianzhu = qingtianzhu obj.qingtianzhu(obj,"大擎天柱") # 改造2 把qingtianzhu变成绑定方法(系统帮助我们传递对象) import types # MethodType(函数,对象) 要把那个函数作为对象的绑定方法 obj.qingtianzhu = types.MethodType(qingtianzhu,obj) obj.qingtianzhu("大大擎天柱") # (3) 添加lambda表达式 obj.fangxiangpan = lambda : print("我是制造方向盘的方法") obj.fangxiangpan()