zoukankan      html  css  js  c++  java
  • 封装

    封装:目的对外提供接口,隐藏内部属性

    1.数据属性: __x = 1 变形为: _A__x = 1

    2.函数属性 def __foo(self):变形为: def _A__foo(self):

    class A:
    
        __x =10
    
    def __init__(self,name):
        self.__name = name
    
    def __foo(self):  #函数属性   变形为def _A__foo(self):
        print('run foo')
    
    def bar(self):
        self.__foo()
        
     a = A('egon')  #实例化一个对象
    a._A__foo()    #访问属性: 从实例化对象的角度访问类里面的方法即函数
    print(a._A__x)
    a.bar()
    

    访问属性: 从类的的角度访问,方法同样

    print(A._A__x) #从1
    print(A._A__foo) #从<function A.__foo at 0x000000000217FAE8>

    实例1:

    class Teacher:
    
        def init(self, name, age):
            self.__name = name
            self.__age = age
            def tell_info(self):
        print('姓名:%s,年龄:%s' % (self.__name, self.__age))
        t = Teacher('egon', 18)
    
    t.tell_info() #在外部访问内部的隐藏属性,就需要通过一个接口进行间接
    

    实例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

    是一种特殊的属性,访问它时会执行一段功能(函数)然后返回值

    property在类调用方法时,让感知不到是在调用方法

    @property与封装(隐藏)的应用

    class People:
        def init(self,name):  #定义属性  一步
            self.__name=name
    @property  #使用者可以向访问数据属性一样直接访问,
    def name(self):
        return self.__name
        p = People('egon')
    
    print(p.name)
    类定义为隐藏属性时,想要访问内部属性,只能开一个接口,定义一个方法进行访问来实现,但是从外部访问时是一个方法(函数)
    此时加上@property之后,就可以直接在外部访问,而且不用加括号的形式访问
    

    @property与类(非隐藏)的应用:

    class Room:
        def __init__(self,name,width,length):
            self.name=name
            self.width=width
            self.length=length
    @property  ##使用者可以向访问数据属性一样直接访问,
    def area(self):
        return self.width * self.length
    
    r1=Room('alex',5,5)
    print(r1.area,'====')
    相当于@property是一种伪装使用者调用时,就相当于调他的方法,同时意味着方法必须有一个返回值
    
  • 相关阅读:
    mac 版 Pycharm 激活
    最快的 maven repository--阿里镜像仓库
    java-Object
    java --replaceAll方法
    正则表达式中^[a-z]与[^a-z]有区别吗
    keyListener用的健值表,保留一份
    java播放背景音乐 mp3和mav都可以播放
    腾讯云ubuntu远程桌面
    nginx 配置转发到其他多台服务器
    java 键盘监听事件
  • 原文地址:https://www.cnblogs.com/sunny7/p/9715496.html
Copyright © 2011-2022 走看看