20181217(组合,封装)

20181217

一、面向对象的精髓

将数据和处理数据的代码绑定,成了一个对象。 只要获取到对象,相应的数据和方法就有了。

 

二、组合

组合:一个对象的属性来自于另外一个类(或多个类)的对象(或多个对象),称之为组合。 组合可以使这个对象获得另外一个对象的所有属性和功能。组合是对象之间的一种关系。 优点:也可以降低代码的冗余,相比较继承,耦合度更低。

class Person:
   def __init__(self,name,sex):
       self.name = name
       self.sex = sex


class Student(Person):
   def __init__(self,name,sex,number):
       super().__init__(name,sex)
       self.number = number

class Phone:
   def __init__(self,phonenumber):
       self.phonenumber = phonenumber

   def phonecall(self):
       print("%s 打电话" %self.phonenumber)

创建两个对象:
s = Student("kevin","male","007")
p = Phone("18855555555")
为对象s添加phone属性,属性指向另一个对象
s.phone = p
对象s通过phone属性可以调用对象p的方法(函数)
s.phone.phonecall()
print(s.__dict__)
输出结果:
18855555555 打电话
{'name': 'kevin', 'sex': 'male', 'number': '007', 'phone': <__main__.Phone object at 0x00000160C8A6BD30>}

 

三、封装

什么是封装: 在程序中,封装指的是将内容隐藏起来(在面向对象的编程中,隐藏的是属性和方法)。 注意:封装绝不是单纯的隐藏,封装是隐藏内部实现的细节,对外提供使用接口。

为什么要封装: 封装是为了明确区分内部和外部。 可以提高安全性(比如cpu频率,缓冲出大小)对于封装属性而言,是通过给访问和修改增加额外的逻辑判断实现的。

 

如何使用封装: 在属性或方法名称前加上两个下划线,就可以将其设置为私有属性/方法。 python中权限只有两种,公开和私有。 属性的封装,通常需要提供相应的设置器和访问器。

封装的特点: 被隐藏的内容,在内部是可以访问的,在外部是不可以访问的。

class Person:
   def __init__(self,name,sex,idcard):
       self.name = name
       self.sex = sex
       self.__idcard = idcard

   def say_hi(self):
       print("hello,I am %s" %self.name)
   def idcard(self):
       print("my idcard is %s" %self.__idcard)

   def get_idcard(self,pwd):  # 可以使用方法,将内部封装的内容返回出去
       if pwd == 123:
           return self.__idcard
       else:
           return "滚"

   def set_idcard(self,pwd,new):  # 可以使用方法,将内部封装的属性进行修改
       if pwd == 123:
           self.__idcard = new
           return self.__idcard
       else:
           return "滚"

p = Person("egon","male","3456789987654")
p.say_hi()
p.idcard()  # 通过函数可以访问(函数中如果有)
# p.__idcard # 是无法访问的
print(p.get_idcard(123))   # 既实现了隐藏,又提供了访问的接口(还可以验证)
print(p.set_idcard(123,"xxxxxxxxxxx"))   # 修改方法
原文地址:https://www.cnblogs.com/realadmin/p/10134054.html