• 三. python面向对象(私有属性和私有方法 私有静态方法 私有类方法)


    一. 私有属性(封装)

    # 侠义 上的封装  面向对象的三大特性之一
    # 属性 和 方法都隐藏起来  不让你看到
    # 如果要让内部属性不被外部属性直接访问    在属性前加上两个下划线__
    # 在python中 如果在属性前加上两个下划线那么这个属性就变成了私有属性
    # print(per.__money)  #在属性前面加上__不能访问内部属性
    class person(object):
        def eat(self ,food):
            print("eat-- " +food)
            print(self.__money)      # 在内部打印私有属性
    
        def __init__(self,height ,weight ,money):
            # 定义属性
            self.height =height
            self.weight =weight
            self.__money =money    #  定义私有属性
    
    per =person(300 ,100 ,20000)
    per.age =1000000000000000000000000
    print(per.age)  # 1000000000000000000000000
    # print(per.__money)   # 在属性前面加上__不能访问内部属性  会报错   所以只要在内部访问
    per.eat("玻璃")
    
    
    # 如果要让内部属性不被外部属性直接访问    在属性前加上两个下划线__   
    # 在python中 如果在属性前加上两个下划线那么这个属性就变成了私有属性
    # 如果你想被外部访问内部属性直接加上  __                   列如这里__money  

    1. 修改私有属性

    class person(object):
        def __init__(self, height, weight, money):
            # 定义属性
            self.height = height
            self.weight = weight
            self.__money = money
            # 通过内部的方法 修改私有属性
            # 通过自定义的方法实现对私有属性的赋值和取值
        def setMoney(self, money):
                # 数据过滤
                if money < 0:
                    money = 0
                self.__money = money
        def getMoney(self):
                return self.__money
    
        def run(self):
            print(self.__money)  # 内部访问     #22222222元
    
    per = person( 300, 100, "22222222元")
    per.run()#  22222222元
    
    per.setMoney(100)
    
    per.run() # 100
    # 在python中 __xxx__属于特殊变量 可以直接访问的
    
    class person(object):
        def __init__(self, height, weight, money):
            # 定义属性
            self.__height__= height
            self.weight = weight
            self.__money = money
            # 通过内部的方法 修改私有属性
            # 通过自定义的方法实现对私有属性的赋值和取值
        def setMoney(self, money):
                # 数据过滤
                if money < 0:
                    money = 0
                self.__money = money
        def getMoney(self):
                return self.__money
    
        def run(self):
            print(self.__money)  # 内部访问     #22222222元
            print(self.__height__)   #300
    
    
    per = person( 300, 100, "22222222元")
    per.run()#  22222222元
    per.setMoney(100)
    per.run() # 100
    print(per.__height__)   # 300

    2.私有方法

    class Per(object):
        __key=55555         #静态属性 也可以变成私有属性
        def __init__(self,name,passwd,age):
            self.name=name
            self.__passwd=passwd     #  加上__ 私有属性
            self.__age=age
    
        def get_pwd(self):
            print(self.__dict__)
            print(self.__key,"静态私有属性")
            return  self.__passwd      #   只有在类的内部使用私有属性 就会自动的带上 _类命
    
    
    
        def __agel(self):             # 加上__私有方法
            # print(self.__doc__)
            print("私有方法!!!!!!")
            return self.__age
    
        def login(self):                #内部调用私有方法    外部取不到
    
            self.__agel()
    aa=Per("张三","123456",'222')
    
    print(aa.get_pwd())
    # {'name': '张三', '_Per__passwd': '123456', '_Per__age': '222'}
    # 55555 静态私有属性
    # 123456
    
    
    print(aa.login())
    # None
    # 私有方法!!!!!!
    # None
    
    # print(aa._Per__passwd)  # 不能这么调用      单下划线   '_Per__age
    # print(aa._Per__age)  # 不能这么调用      单下划线   '_Per__age
    # # 123456
    # # 222
    
    aa.login()
    # 私有方法!!!!!!
    class Room(object):
    
        def __init__(self,name,length,width):
            self.name=name
            self.__length=length
            self.__width=width
    
    
        def area(self):
            print(self.__width)   #  10
            return  self.__length*self.__width
    
    aa=Room("张三",22,10)
    
    print(aa.area())  # 220
    
    print(aa.__dict__)  # {'name': '张三', '_Room__length': 22, '_Room__width': 10}
    
    print(aa._Room__width)   # 10
    # 假设 父类的私有属性 能被 子类 调用吗    答案是 不能的         说明不能被继承
    class Foo:
        __key='1223'
    class Son(Foo):
        print(Foo.__key)
    # 私有方法的使用
    class Gn(object):
       bar=11111
       def __init__(self,name,age):
           self.name=name
           self.age=age
       def __aa(self):        # 在前面加上  __ 就变成了私有方法   和私有属性一样  只能内部访问  不能外部方法
           print(f'我叫--{self.name}--今年{self.age}')
    
       def __cc(self):
            print("卧槽11111111111111111111111111111111111111")
    
       def fn(self):
           self.__aa()
           self.__cc()
    
    ss=Gn("王五",666)
    ss.fn()


    # 私有方法的使用
    class Gn(object):
    bar=11111
    def __init__(self,name,age):
    self.name=name
    self.age=age
    def __aa(self,v): # 在前面加上 __ 就变成了私有方法 和私有属性一样 只能内部访问 不能外部方法
    print(f'我叫--{self.name}--今年{self.age}',v)

    def __cc(self):
    print("卧槽11111111111111111111111111111111111111")

    def fn(self):
    self.__aa("这是私有方法哦")
    self.__cc()

    ss=Gn("王五",666)

    ss.fn()
    # 我叫--王五--今年666 这是私有方法哦
    # 卧槽11111111111111111111111111111111111111
     

     私有的静态方法@staticmethod

    class Gn(object):
       bar=11111
       def __init__(self,name,age):
           self.name=name
           self.age=age
       def __aa(self,v):
           print(f'我叫--{self.name}--今年{self.age}',v)
       @staticmethod
       def __fn():
           print("我是静态私有属性哈哈哈哈哈")
       def cc(self):
           Gn.__fn()
    ss=Gn("王五",666)
    ss.cc()
    # 我是静态私有属性哈哈哈哈哈
    
    print("********************************************************88")
    
    class Gn(object):
       bar=11111
       def __init__(self,name,age):
           self.name=name
           self.age=age
       def __aa(self,v):
           print(f'我叫--{self.name}--今年{self.age}',v)
    
       @staticmethod
       def __fn():
           print("我是静态私有属性哈哈哈哈哈")
    
       @staticmethod
       def stat():
           Gn.__fn()
    
    ss=Gn("王五",666)
    Gn.stat()
    # 我是静态私有属性哈哈哈哈哈

      私有的类方法@staticmethod

    class Gn(object):
       bar=11111
    
       @classmethod
       def __aa(cls,name):
           print(cls.bar)
           print("我是类方法!!!!!!!!")
           print(name)
    
       def bb(self):
           Gn.__aa("张三")
    ss=Gn()
    ss.bb()
    
    # 11111
    # 我是类方法!!!!!!!!
    # 张三
    
    print("********************************************************")
    
    class Gn(object):
       bar=11111
       @classmethod
       def __aa(cls):
           print(cls.bar)
           print("我是类方法!!!!!!!!")
    
       @classmethod
       def bb(cls):
           Gn.__aa()
    ss=Gn()
    # ss.bb()
    Gn.bb()
    #
    # 11111
    # 我是类方法!!!!!!!!

     私有属性方法@property

    class Da(object):
        def aa(self):
            print("实例化")
        @property
        def __bb(self):
            print("私有属性")
    
        @property
        def cc(self):
            c.__bb
    
    c=Da()
    c.cc
    # 私有属性
    print("******************************************************************8")
    
    class Da(object):
        def aa(self):
            print("实例化")
        @property
        def __bb(self):
            print("私有属性")
    
        def cc(self):
              c.__bb
    c=Da()
    c.cc()
    # 私有属性
  • 相关阅读:
    nginx配置反向代理
    hyperchain HVM使用java编写智能合约的编译、部署流程
    leetcode 140单词拆分Ⅱ
    bomblab phase5
    bomb lab 二三阶段
    2021暑假算法学习笔记(基础复习)#2
    2021暑假算法学习笔记(基础复习)#1
    O(logn)最长上升子序列并输出
    A Daily Topic # 7 阶乘的和(二进制/枚举)
    A Daily Topic # 6 星期几(模拟)
  • 原文地址:https://www.cnblogs.com/Sup-to/p/10878954.html
Copyright © 2020-2023  润新知