精华内容
下载资源
问答
  • 2021-10-29 09:34:52

    一.类的私有属性

    __private_attrs:两个下划线开头,声明该属性为私有

    1.类的私有属性不能被类的实例直接访问,示例代码如下:

    class A:
        __secretCount = 0  # 私有变量
    
        def count(self):
            self.__secretCount += 1
            print(self.__secretCount)
    
    a = A()
    a.__secretCount

    执行以上代码会报错,输出结果为:

    Traceback (most recent call last):
      File "d:\Code\python\xxx_api\ppp.py", line 1418, in <module>
        a.__secretCount
    AttributeError: 'A' object has no attribute '__secretCount'

     2.类的私有属性虽然不能被类的实例直接访问,但是可以通过被类的实例以object._className__attrName( 对象名._类名__私有属性名 )这种形式来访问属性

    class A:
        __secretCount = 0  # 私有变量
    
        def count(self):
            self.__secretCount += 1
         
    更多相关内容
  • _age #赋值和输出,不会报错,结果为18 i.print_age() #class内部方法输出__age为20 按照道理来说1,2行是不该是这样的,私有属性是无法在外部访问的,而在这里居然可以赋值后访问。而第三行表明,对于实例 i ,有...

    class test(object):

    def __init__(self, age, height):

    self.__age = age

    self.__height = height

    def print_(self):

    print self.__age

    i=Student(20,175)

    对于这个直接print i.__age  是会提示报错的,但是

    i.__age=18

    print __age #赋值和输出,不会报错,结果为18

    i.print_age()  #class内部方法输出__age为20

    按照道理来说1,2行是不该是这样的,私有属性是无法在外部访问的,而在这里居然可以赋值后访问。而第三行表明,对于实例 i ,有两个(一个?)同名属性,还不报错?

    后来百度了一下,以下全部复制于这里:http://www.pythonclub.org/python-class/private  有兴趣可以看看,还有关于python的其他的内容

    Python中默认的成员函数,成员变量都是公开的(public),而且python中没有类似public,private等关键词来修饰成员函数,成员变量。

    在python中定义私有变量只需要在变量名或函数名前加上 ”__“两个下划线,那么这个函数或变量就会为私有的了。

    在内部,python使用一种 name mangling 技术,将 __membername替换成 _classname__membername,所以你在外部使用原来的私有成员的名字时,会提示找不到。

    命名混淆意在给出一个在类中定义“私有”实例变量和方法的简单途径, 避免派生类的实例变量定义产生问题,或者与外界代码中的变量搞混。 要注意的是混淆规则主要目的在于避免意外错误, 被认作为私有的变量仍然有可能被访问或修改。 在特定的场合它也是有用的,比如调试的时候, 这也是一直没有堵上这个漏洞的原因之一 (小漏洞:派生类和基类取相同的名字就可以使用基类的私有变量。)

    展开全文
  • python私有属性访问方法 class Attr(): def __init__(self): self.arg1 = 'public' self.__arg2 = 'private' if __name__ == '__main__': attr = Attr() #public属性获取 print(attr.arg1) ...

    python私有属性访问方法

    class Attr():
        def __init__(self):
            self.arg1 = 'public'
            self.__arg2 = 'private'
    
    if __name__ == '__main__':
        attr = Attr()
        #public属性获取
        print(attr.arg1)
        #报错,'Attr' object has no attribute '__arg2              
        #print(attr.__arg2)   
        #访问private属性         
        print(attr._Attr__arg2)  
    

    Attr类中arg1为公有属性,arg2为私有属性。公有属性可以直接被访问,而直接访问私有属性会报“'Attr' object has no attribute '__arg2”的错误,原因是python对私有属性的名字进行了修改。我们通过dir()方法可以查看private的内置方法和属性

    print dir(Attr())

    结果如下:

    ['_Attr__arg2', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'arg1']
    

    可以看到python内部将私有__arg2修改成了' _Attr_arg2 ' (_类名__属性名) ,这就是我们无法直接访问私有属性或者方法的原因,所以我们可以通过Attr()._Attr__arg2来访问私有属性。

    总结:python并没有真正的私有化属性,尽管通过__private将属性私有化了,但是仍然可以通过_类名__属性名 得到私有属性,            所以属于伪私有。                                                                                                                                                                             建议我们不要通过这种方法来访问私有属性,而是通过getter方法或者@property的方式来获得私有属性。

    后续再研究@property

    展开全文
  • python私有属性和方法

    千次阅读 2021-10-07 17:05:21
    1、私有权限:在属性名和方法名 前面 加上两个下划线 __ 私有属性 和 私有方法,都不能通过对象直接访问,但是可以在本内部访问; 私有属性 和 私有方法,都不会被子继承,子类也无法访问; 私有属性 ...

    1、私有权限:在属性名和方法名 前面 加上两个下划线 __ 类的私有属性 和 私有方法,都不能通过对象直接访问,但是可以在本类内部访问;

    类的私有属性 和 私有方法,都不会被子类继承,子类也无法访问; 私有属性 和 私有方法 往往用来处理类的内部事情,不通过对象处理,起到安全作用。

    2、私有方法和私有属性,子类通过调用通过实例化方法调用私有属性和方法,不能直接调用

    3、私有属性,可以在类内部通过self调用,但不能通过对象访问

         私有方法,可以在类内部通过self调用,但不能通过对象访问

    4、对象不能访问私有权限的属性和方法

    子类不能继承父类私有权限的属性和方法

    5、Python中没有像C++中 public 和 private, protected 这些关键字来区别公有属性和私有属性。

    Python是以属性命名方式来区分,如果在属性和方法名前面加了2个下划线'__',则表明该属性和方法是私有权限,否则为公有权限。

    6、私有属性不能直接访问,所以无法通过第一种方式修改,一般的通过第二种方式修改私有属性的值:定义一个可以调用的公有方法,在这个公有方法内访问修改。

    现代软件开发中,通常会定义get_xxx()方法和set_xxx()方法来获取和修改私有属性值

    get_xxx()方法-->返回私有属性的值 set_xxx()方法-->接收参数,修改私有属性的值

    对象不能访问私有权限的属性和方法,可以通过访问公有方法set_money()来修改私有属性的值

    可以通过访问公有方法get_money()来获取私有属性的值

    7、可以通过类或者实例对象调用

    8、可以通过实例化对象调用,类不能调用

    9、对象修改类属性,只对本对象有效果,对别的 对象没有影响

    10、类方法是类对象所拥有的方法,需要用修饰器@classmethod来标识其为类方法

    对于类方法,第一个参数必须是类对象,一般以cls作为第一个参数(当然可以用其他名称的变量作为其第一个参数


    11、但是大部分人都习惯以'cls'作为第一个参数的名字,就最好用'cls'了),能够通过实例对象和类对象去访问。

    12、静态方法使用@staticmethod装饰,调用时可以使用类的实例或者类本身来调用。静态方法不需要多定义参数,可以通过对象和类来访问。

    13、类方法使用@classmethod装饰,第一个参数为类(cls),调用时可以通过类的实例或者类本身来调用。 实例方法定义时第一个参数为类的一个实例(self),调用时必须通过实例调用。

    实例方法中需要self参数,因此调用实例方法只能通过实例对象调用 也可以通过类调用但是一般不这样用

    14、__new__至少要有一个参数cls,代表要实例化的类,此参数在实例化时由Python解释器自动提供

     __new__必须要有返回值,返回实例化出来的实例,这点在自己实现__new__时要特别注意,可以return父类__new__出来的实例,或者直接是object的__new__出来的实例

    15、__init__有一个参数self,就是这个__new__返回的实例,__init__在__new__的基础上可以完成一些其它初始化的动作__init__不需要返回值

    我们可以将类比作制造商,__new__方法就是前期的原材料购买环节,__init__方法就是在有原材料的基础上,加工,初始化商品环节

    16、单例模式:永远用一个对象得实例,避免新建太多实例浪费资源 

    实质:使用__new__方法新建类对象时先判断是否已经建立过,如果建过就使用已有的对象

    课后练习:

    创建一个老师类 ,老师类中有学习的方法,老师类中有私有的挣钱的方法

    老师类中有私有类属性money = 100000,还有一个公有的类属性age=45

    创建一个学生类,继承自老师类,并重写了老师类中学习的方法 调用学生类中挣钱的方法

    调用老师类中的私有属性 修改老师类中的私有属性为200000 调用老师类的私有方法 修改类属性

     

     

     

    展开全文
  • 当我们定义一个的时候,有时候会定义一个私有属性来辅助开发。在其它语言中经常会用到 private 来修饰这个属性为私有属性。可是你知道么?同样为私有属性,有的开发语言中是真私有属性,有的是假私有属性。 例如 ...
  • __name="私有属性" def func(self): print(C.__name) class sub_C(C): def info(self): print(C.__name)#派生中不可以访问父类的私有字段 obj=C() obj.func() obj=sub_C() obj.info() 方法、属性的访问于上述...
  • 目录 一、私有属性 语法 特性 ...二、私有化方法 ...一、私有属性 ...两个下划线开头,声明该属性为...私有属性可以在里面访问,修改。 特性-3: 子类不能继承私有属性。 二、私有化方法 语法...
  • 实例化对象名._类名__私有属性名 class Flylove: price = 123 def __init__(self): ...以上这篇python直接访问私有属性的简单方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大
  • 本文实例讲述了Python 私有属性和私有方法。分享给大家供大家参考,具体如下: xx:公有变量 _xx:公有变量或方法,不能通过import导入其他模块(只有模块内部使用)。对象和子类可以访问 __xx:私有变量或方法(伪...
  • Python默认的成员函数和成员变量都是公开的,私有属性指只有在的内部使用的属性或方法,表现形式为以“__“ 属性名或方法名以双下划线开头。 class Test(object): __count = 0 # 私有属性 __count def get_...
  • 如何设置python类私有属性

    千次阅读 2020-12-20 20:23:11
    私有属性: __private_attrs:两个下划线开头,声明该属性为私有,不能在地外部被使用或直接访问。 在内部的方法中使用时 self.__private_attrs。 的方法: 在地内部,使用def关键字可以为定义一个...
  • 私有属性 和 私有方法,都不能通过对象直接访问,但是可以在本内部访问; 私有属性 和 私有方法,都不会被子继承,子类也无法访问; 私有属性 和 私有方法 往往用来处理的内部事情,不通过对象处理...
  • 将给大家介绍什么是私有属性和私有方法,科普一下伪私有属性和私有方法,包括如何访问。 1.私有属性和私有方法 什么是私有? 对象的某些属性或者方法,只希望在对象的内部被使用,而不希望在外部被访问 通过...
  • python---私有属性

    2022-04-17 19:03:23
    私有权限 封装的意义: ...私有属性 和 私有方法,都不能通过对象直接访问,但是可以在本内部访问; 私有属性 和 私有方法,都不会被子继承,子类也无法访问; 私有属性 和 私有...
  • 私有属性 和 私有方法,都不能通过对象直接访问,但是可以在本内部访问; 私有属性 和 私有方法,都不会被子继承,子类也无法访问; 私有属性 和 私有方法 往往用来处理的内部事情,不通过对象...
  • python类私有属性和公共属性

    千次阅读 2018-05-20 17:17:43
    私有属性便是在前面加上“__”标识符,而公共属性则不必。在的外面访问私有属性会引发异常。class Base: def __init__(self, value): self.__value = value b = Base(5) print(assert b.__value) Trac...
  • Python类私有属性与私有方法的使用

    万次阅读 多人点赞 2019-04-16 20:06:26
    1.Python中属性:属性 ,实例属性,私有属性的使用 在Python中的属性分为:属性和对象(实例)属性: 1.属性就是属于所有,可以直接用类名.属性名直接调用,的属性在内存中只有一份。实例属性就是在__init__...
  • 本文实例分析了python私有属性和方法。分享给大家供大家参考。具体实现方法如下: python默认的成员函数和成员变量都是公开的,并且没有类似别的语言的public,private等关键词来修饰。 在python中定义私有变量只...
  • Python没有类似于Java的private关键字, 但也可以为定义私有属性. 只需将属性命名变为以__开头, 例如 __field. 示例代码: class Vector2D(object): def __init__(self, x, y): self.__x = float(x) self.__y = ...
  • python类私有属性

    2016-08-23 19:37:08
    python类私有属性python中没有private关键字,想要创建一个私有的变量需要通过命名规则来实现在变量名之前加两个下划线__name,则在外部就不能直接通过实例.__name访问,具体原理python编译器将其命名修改为了_...
  • 本文实例讲述了Python面向对象程序设计之私有属性及私有方法。分享给大家供大家参考,具体如下: 如果有一个对象,当需要对其进行修改属性时,有2种方法: (1)对象名.属性名=数据—->直接修改 (2)对象名.方法名...
  • 1、 场景定义 私有属性 是指在 Python 的面向对象开发过程中,对象的某些属性只想在对象的内部被使用,但不想在外部被访问...在 Python 中定义私有属性和私有方法的语法如下: class Staff: def __init__(self, s_nam.
  • 私有属性 就是 对象 不希望公开的 属性 私有方法 就是 对象 不希望公开的 方法 定义方式 在 定义属性或方法时,在 属性名或者方法名前 增加 两个下划线,定义的就是 私有 属性或方法 __secr...
  • python类的成员没有访问控制限制,这与其他面向编程的语言不同。 通常约定以两个下划线开头,但是不以两个下划线结束的属性是私有的,其他为公共的。注意,不能直接访问私有属性,但可以通过方法中访问。 举个栗子:...
  • 主要介绍了Python私有属性私有方法应用场景解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 55,711
精华内容 22,284
关键字:

python类的私有属性

友情链接: rtplib.tar.gz