组合,封装

"""
class Mysql:
def __init__(self,host, port, db, charset):
self.host = host
self.port = port
self.db = db
self.charset = charset

def exc1(self,sql):
conn = connect(self.host,self.port,self.db,self.charset)
conn.execute(sql)
return 123

def exc2(self, proc_name):
conn = connect(self.host,self.port,self.db,self.charset)
conn.call_pro(proc_name)
return 123


sql1=Mysql('127.0.0.1',3306,'db1','utf8')
sql1.exc1('select * from tb1;')
sql1.exc2('存储过程的名字')
"""
1.组合
  多个对象放在一起叫组合
  也可以降低代码的冗余
  在程序中一个对象将另一个对象作为自己的属性

学生会增加各种各样的新的属性,比如手机,电脑,这样一来python类中会增加大量的属性和方法
后期的维护成本非常高
这时就是需要使用组合,来减少代码冗余
继承是一种关系,学生是人类,老师是人类
组合是对象之间的关系,学生对象拥有手机对象
"""
class Phone:
def __init__(self,phonenumber,operator,address):
self.phonenumber = phonenumber
self.operator = operator
self.address = address

def call(self):
print("%s正在拨号:"%self.phonenumber)
class Person:
def __init__(self,name,sex,age):
self.name = name
self.sex = sex
self.age =age
class Student(Person):
def __init__(self,name,sex,age,number):
super().__init__(name,sex,age)
self.number = number

def select_cursor(self):
print("%s正在选课、。。。"%self.name)

def show_info(self):
print(self.__dict__)
class Teacher(Person):
def __init__(self,name,sex,age,salary,level):
super().__init__(name,sex,age)
self.salary = salary
self.level = level
def set_score(self):
print("%s正在为学生打分。。。"%self.name)

stu = Student("乔峰","男",29,"23")
p1 = Phone("2333333333","中国小米移动","上海浦东")
stu.phone = p1
stu.phone.call()
"""

2.封装
  类似工厂,拿个纸箱,装入一堆产品,拿胶带封起来
  在程序中,封装的指的是将内容隐藏起来
  在面向对象中属性和方法可以被隐藏
  
  封装不是单纯的隐藏
  封装是指隐藏内部实现细节,对外提供使用接口

  1.提高安全性,cpu频率,缓冲区大小
  2.封装是为了明确区分内部和外部

  在属性或方法名称前加上两个下划线,就可以将其设置为私有的
  另外补充:python中权限只有两种,公开的(谁都能访问)和私有的(只有自己能访问)  
  封装特点:被隐藏的内容在内部可以直接访问,外部无法访问
  属性的封装,通过需要提供相应的设置器和访问器
"""
class Student:
def __init__(self,name,sex,age,idcard):
self.name =name
self.sex = sex
self.age = age
self.__idcard = idcard

def sayHI(self):
print("hello i am %s age is:%s sex is:%s"%(self.name,self.sex,self.age))

def test(self):
print(self.__idcard)

def get_idcard(self,pwd):
if pwd == "123":
return self.__idcard
else:
print("错误啊")

def set_idcard(self,pwd,new_idcard):
if pwd == "123":
self.__idcard = new_idcard
else:
print("你算个球")

stu = Student("egon","男",20,"33012298828312313")
stu.sayHI()
# stu.test()
# Idcard = stu.get_idcard("123")
# print(Idcard)
stu.set_idcard("123","23333333333")
print(stu.get_idcard("123"))


原文地址:https://www.cnblogs.com/xuezhihao/p/10133425.html