zoukankan      html  css  js  c++  java
  • 08.07面向对象

    访问可见性

    • 私有变量,变量名前面加"__"
    • 私有不可继承,不可在外部调用,但可以在内部调用。
    • 如果非要使用私有变量,那么可以使用dir(class())去查看它真正的名字。
    • 私有变量/函数,在类内部可以直接调用。
    • 如果你想体现一个变量/函数特别重要你可以使用"_"
    #私有
    class
    A(object): def __init__(self): self.__a=1000 self.__b=100 def __B(self): print(self.__a) self.c() def __c(self): print(self.__a) A_=A() print(A_._A__a)
    • 例:私密空间

    class squre(object):
        def __init__(self):
            self._mi="藏起来,不给看,想看输密码"  
        @property
        def mi(self):
            return self._mi
        @mi.setter
        def mi(self,str_):
            self._mi=str_
    def look():
        s=squre()
        print(s.mi)
    def change(password,str_):
        if password =='2323213':
            s=squre()
            s.mi=str_
            print(s.mi)
        else:
            print('密码错误')
    
    change('2323213','hhhhh')

    @property装饰器and@.setter装饰器

    使用装饰器的时候,需要注意:

    1. 装饰器名,函数名需要一致.
    2. property需要先声明,再写setter,顺序不能倒过来
    3.  如果你希望一点变量只是被访问不能被修改,那么可以使用访问器@property
    4. 如果要修改访问器中的变量,可以搭建一个修改器,或者删除访问器.
    #装饰器的使用
    class
    Name(object): def __init__(self,a,b): self.__a=a self.__b=b @property def A (self): print(self.__a) name=Name(00,200) name.A
    #修改器的使用
    class Name(object):
        def __init__(self,a,b):
            self.__a=a
            self._b=b
        @property
        def A(self):
            print(self.__a)
        @A.setter
       def A(self,a1):
        self.__a=a1
       def play(self):
        print(self.__a)
        print(self.__b)
    name=Name(100,200)
    name.A=1000
    name.play()
    • 例子:输入三个数字(私有),求三个数字的和,尝试更改其中两个数字
    class A(object):
        def __init__(self,a,b,c):
            self.__a=a
            self.__b=b
            self.__c=c
        @property
        def B(self):
            print(self.__a)
        @B.setter
        def B(self,num):
            self.__a=num
        def sum(self):
            print(self.__a+self.__b+self.__c)
    a=A(12,1,4)
    a.B=99
    a.sum() 

    在python中类是动态的。

    class Num(object):
        def __init__(self):
            self.a = 1000
        
        def A(self):
            print(self.b)
    
    
    num = Num()
    num.b =1000000
    # print(num.a)
    print(num.b)
    num.A()

    __slots__魔法

           我们讲到这里,不知道大家是否已经意识到,Python是一门动态语言。通常,动态语言允许我们在程序运行时给对象绑定新的属性或方法,当然也可以对已经绑定的属性和方法进行解绑定。但是如果我们需要限定自定义类型的对象只能绑定某些属性,可以通过在类中定义__slots__变量来进行限定。需要注意的是__slots__的限定只对当前类的对象生效,对子类并不起任何作用。

    class Person(object):
        #限定Person对象只能绑定_name,_age和——gender属性
        __slots__ = ('_name','_age','_gender')
        def __init__(self,name,age):
            self.__name=name
            self.__age=age
  • 相关阅读:
    软件工程(2018)结对编程第二次作业
    软件工程(2019)结对编程第一次作业
    软件工程(2019)第三次个人作业
    软件工程(2019)第二次作业
    软件工程(2019)第一次作业
    实用的小工具
    php中需要注意的函数(持续更新)
    sql 防注入(更新问题)
    laravel 中将一对多关联查询的结果去重处理
    调试location指令时,直接让location输出文本
  • 原文地址:https://www.cnblogs.com/lxq0727/p/11315756.html
Copyright © 2011-2022 走看看