day25

今日内容:
    01 封装
    02 装饰器
        property
        classmethod
        staticmethod

# 封装
'''
# 1、封装
#       封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别;将抽象得到的数据和行为(或功能)相结合,
#       形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。
# 2、在封装的基础上,可以将装到对象或者类中的属性给隐藏起来
# 注意:
#     (1)在定义类或者初始化对象时,在属性前加__,就会将该属性隐藏起来
#          但该隐藏其实只是一种变形_类名__属性名,并没有真的隐藏起来
#     (2)该变形操作是在类定义阶段扫描语法时发生的变形,类定义之后添加的__开头的属性不会发生变形
#     (3)该隐藏是对外不对内
#     (4) 在继承中,父类如果不想让子类覆盖自己的方法,可以将方法定义为私有的

# 例1
# class Student:
#     __school = "oldboy"  # _Student__school = "oldboy"
#
#     def __init__(obj, x, y, z):
#         obj.__name = x  # obj._Student__name = x
#         obj.age = y
#         obj.gender = z
#
#     def __choose(self):  # obj._Student__choose
#         print("%s 正在选课" % self.__name)
#
#
# stu_obj1 = Student("aaa", 18, "female")
# stu_obj1.__x=111
# print(stu_obj1.__dict__)
# print(stu_obj1._Student__name)
#
# print(Student.__dict__)
# print(Student._Student__school)
# print(stu_obj1._Student__school)


# 隐藏属性的意义何在
# 1、把数据属性隐藏起来的意义是:在类内开放接口,让外界使用者通过接口来操作属性值,我们可以在接口之上附加任意的逻辑
#    来严格控制外界使用者对属性的操作

# class Student:
#     __school = "oldboy"  # _Student__school = "oldboy"
#
#     def __init__(obj, x, y, z):
#         obj.__name = x  # obj._Student__name = x
#         obj.__age = y
#         obj.gender = z
#
#     def __choose(self):  # obj._Student__choose
#         print("%s 正在选课" % self.name)
#
#     def get_name(self):
#         print(self.__name)  # print(self._Student__name)
#
#     def set_age(self,x):
#         if type(x) is not int:
#             print("年龄必须是整型")
#             return
#         self.__age = x
#
#     def get_age(self):
#         print(self.__age)
#
#     def del_age(self):
#         del self.__age
#
# stu_obj1 = Student("aaa", 18, "female")
# # stu_obj1.get_name()
#
#
# # stu_obj1.set_age("asfdasfdasfafd")
# stu_obj1.set_age(19)
# stu_obj1.get_age()
# # print(stu_obj1.__dict__)

# 2、把功能属性隐藏起来:隔离复杂度
# class ATM:
#     def __card(self):
#         print('插卡')
#     def __auth(self):
#         print('用户认证')
#     def __input(self):
#         print('输入取款金额')
#     def __print_bill(self):
#         print('打印账单')
#     def __take_money(self):
#         print('取款')
#
#     def withdraw(self):
#         self.__card()
#         self.__auth()
#         self.__input()
#         self.__print_bill()
#         self.__take_money()
#
# a=ATM()
# a.withdraw()
'''

# property、classmethod、staticmethod
'''
# property装饰器
# class P:
#     def __init__(self,name,height,weight):
#         self.name = name
#         self.height = height
#         self.weight = weight
#
#
#     @property
#     def bmi(self):
#         return self.weight / self.height ** 2
#
#
# p = P('aaa',1.80,65)
# print(p.bmi)


# class Student:
#     __school = "oldboy"  # _Student__school = "oldboy"
#
#     def __init__(obj, x, y, z):
#         obj.__name = x
#         obj.__age = y
#         obj.gender = z
#
#     @property
#     def name(self):
#         print("访问控制")
#         return self.__name
#
#     @name.setter
#     def name(self, x):
#         print("赋值控制")
#         self.__name = x
#
#     @name.deleter
#     def name(self):
#         print("删除控制")
#         del self.__name
#
#
# stu_obj1 = Student("aaa", 18, "female")
# stu_obj1.name


# 类中的定义的函数
# 1、绑定方法:谁来调用就会将谁当作第一个参数传入
#  (1)绑定给对象的方法:类中定义的函数默认就是绑定给对象的方法,应该是由对象调用,会把对象当作第一个参数传入
#  (2)绑定给类的方法:在类中的函数上加一个装饰器@classmethod,该函数就绑定给类了,应该是由类来调用,会把类当作第一个参数传入
# 2、非绑定方法:既不与类绑定也不与对象绑定,就是一个普通的函数,谁都可以来调用,没有自动传参的效果,
#  在函数上添加装饰器@staticmethod

# 例如:
# import uuid
# import settings
# 
# class MySQL:
#     def __init__(self,ip,port):
#         self.mid = self.__create_id()
#         self.ip = ip
#         self.port = port
# 
#     def tell_info(self):
#         print("%s:<%s:%s>" %(self.mid,self.ip,self.port))
# 
#     @staticmethod
#     def __create_id():
#         return uuid.uuid4()
# 
#     @classmethod
#     def from_conf(cls):
#         return cls(settings.IP, settings.PORT)
# 
# # obj = MySQL("10.10.11.11",3306)
# # obj.tell_info()
# obj1 = MySQL.from_conf()
# obj1.tell_info()
'''

 

posted @ 2020-08-06 15:31  板鸭没有腿  阅读(43)  评论(0)    收藏  举报