美文网首页
day25-封装

day25-封装

作者: 天行_b6d0 | 来源:发表于2020-08-10 14:29 被阅读0次

1、什么是封装

封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别;将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。

2、在封装的基础上,可以将装到对象或者类中的属性给隐藏起来

(1)在定义类或者初始化对象时,在属性前加__,就会将该属性隐藏起来,但该隐藏其实只是一种变形_类名__属性名,并没有真的隐藏起来

(2)该变形操作是在类定义阶段扫描语法时发生的变形,类定义之后添加的_开头的属性不会发生变形

(3)该隐藏是对外不对内

(4)在继承中,父类如果不想让子类覆盖自己的方法,可以将方法定义为私有的

3、隐藏属性的意义

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("linlin", 18, "female")
# stu_obj1.get_name()


# stu_obj1.set_age("asfdasfdasfafd")
stu_obj1.set_age(19)
stu_obj1.get_age()
# print(stu_obj1.__dict__)

4、把功能属性隐藏起来:隔离复杂度

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()

5、property

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("linlin", 18, "female")

stu_obj1.name
stu_obj1.name = 19

6、绑定方法与静态方法

类中的定义的函数

  1. 绑定方法:谁来调用就会将谁当作第一个参数传入
    (1)绑定给对象的方法:类中定义的函数默认就是绑定给对象的方法,应该是由对象调用,会把对象当作第一个参数传入
    (2)绑定给类的方法:在类中的函数上加一个装饰器@classmethod,该函数就绑定给类了,应该是由类来调用,会把类当作第一个参数传入

  2. 非绑定方法:既不与类绑定也不与对象绑定,就是一个普通的函数,谁都可以来调用,没有自动传参的效果,在函数上添加装饰器@staticmethod
    例一:

class People:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def tell_info(self):
        print("<%s:%s>" % (self.name, self.age))

    @classmethod
    def f1(cls):
        print(cls)

    @staticmethod
    def f2(x,y,z):
        print(x,y,z)


p1=People('yan',18)
# p1.tell_info()

# print(p1.tell_info)
# print(People.f1)

# People.f1()

# print(p1.f2)
# print(People.f2)
p1.f2(1,2,3)
People.f2(1,2,3)

例二:

import uuid
import settings  # settings.py中存放了IP和PORT

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()  # 自动生成一个id

    @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()

相关文章

  • day25-封装

    1、什么是封装 封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别;将抽象得到...

  • DAY25 纯粹

    一、提问万花筒 DAY25- 20211111 1、抽卡单词:纯粹 2、问题练习: 愿景:如果真的完完全全的活出纯...

  • day25-作业

    HTML代码 CSS代码

  • day25-总结

    时间模块的使用 多线程补充 1.想要结束一个进程就是让它里面所有的线程都结束,进程才会结束2.想要关闭一个子线程,...

  • 62号 #百日生涯营# D25气质日

    百日营的Day25-气质日 【百日生涯营DAY25】 气质日:亦舒说,“一个真正有气质的淑女,从不炫耀她所拥有的一...

  • day25-京东登录

    京东登录页面 1.index.html代码 2.index.css代码 测试结果

  • day25-课堂总结

    BOM基础 1.什么是BOM - 浏览器对象模型(browser object model)js中提供了一个全局的...

  • day25-爱自己

    冥想第三天 感悟: 今天感觉冥想时很平静,很舒服,感受自己身体,接纳自己,学会欣赏自己,新的一天从接纳自己,爱自己...

  • #30天专注橙长计划#数学魔术Day25-找朋友

    #30天专注橙长计划#数学魔术Day25-找朋友 魔术道具:扑克牌 魔术故事:桌上有四堆牌,请一位同学将四堆牌随意...

  • 89号#百日生涯营#day25气质日打卡

    @所有人 @所有人 [太阳]早上好啊!今天是百日营的Day25-气质日,今天由我来为大家服务,一起加油! 【百日生...

网友评论

      本文标题:day25-封装

      本文链接:https://www.haomeiwen.com/subject/srqorktx.html