精华内容
下载资源
问答
  • Python访问私有属性

    2017-02-19 21:11:17
    #coding:utf-8 class Foo:  def __init__(self,name):  self.__name=name  def f1(self):  print(self.__name)   class Bar(Foo): ...print(obj._Foo__name)#可以利用这个方法访问私有字段
    #coding:utf-8
    class Foo:
        def __init__(self,name):
            self.__name=name
        def f1(self):
            print(self.__name)
            
    class Bar(Foo):
        __cc="Good"
        def f2(self):
            print(self.__name)
        @staticmethod
        def f3():
            print(Bar.__cc)
            
    obj=Bar("Alex")
    obj.f1()
    Bar.f3()
    print(obj._Foo__name)#可以利用这个方法访问私有字段
    展开全文
  • 下面小编就为大家带来一篇python直接访问私有属性的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • python 私有属性只能在类内部访问,类外面访问会出错。python 私有属性之所以不能在外面直接通过名称来访问,其实质是因为 python 做了一次名称变换。保护属性python 保护属性更多的是一种语法上的标识,用来提醒...

    私有属性

    python 私有属性以两个下划线开头。

    python 私有属性只能在类内部访问,类外面访问会出错。

    python 私有属性之所以不能在外面直接通过名称来访问,其实质是因为 python 做了一次名称变换。

    保护属性

    python 保护属性更多的是一种语法上的标识,用来提醒直接修改改对象时候要小心。

    python 保护属性和公开属性都可以在类外面直接访问。

    classNewClass(object):def __init__(self):

    self.public_field= 5 #public

    self.__private_field = 10 #private

    self._protect_field = 99 #protect

    def __private_method(self):print "I am private method"

    defpublic_method(self):print "I am public method"test=NewClass()printtest.public_field

    test.public_method()print test.__dict__ #{'_NewClass__private_field': 10, 'public_field': 5}

    #使用变换过后的名称访问,Success

    print test._NewClass__private_field #10

    test._NewClass__private_method() #I am private method

    #直接访问,Fail

    print test.__private_field #AttributeError: 'NewClass' object has no attribute '__private_field'

    test.__private_method() #AttributeError: 'NewClass' object has no attribute '__private_method'

    展开全文
  • 类内部可以访问私有属性(方法) 3.类外部不能直接访问私有属性(方法) 4.类外部可以通过“_类名__私有属性(方法)名“访问私有属性(方法) 【注】:方法本质上也是属性!只不过是可以通过()执行而已,所....

    私有属性

          python对于类的成员没有严格的访问控制限制,这与其他面向对象语言有区别,关于私有属性和私有方法,有如下要点:

          1.通常我们约定,两个下划线开头的属性是私有的(private),其他为公共的(public)。

          2.类内部可以访问私有属性(方法)

          3.类外部不能直接访问私有属性(方法)

          4.类外部可以通过“_类名__私有属性(方法)名“访问私有属性(方法)

    【注】:方法本质上也是属性!只不过是可以通过()执行而已,所以,此处讲的私有属性和公共属性,也同时讲解了私有方法和公有方法的用法,如下测试:同时包含了私有方法和公有方法的例子。

    # 测试私有属性
    class stu():
        def __init__(self, name, age):
            self.name = name
            self.__age = age
    
    
    s = stu('tian', '12')
    print(s.name)
    print(dir(s))  # 对象内所有方法
    print(s._stu__age)

    私有方法

    # 私有方法
    class stu():
        __com = '天天向上'  # 私有类变量
    
        def __init__(self, name, age):
            self.name = name
            self.__age = age
    
        def __work(self):  # 私有方法,内部调用还是正常调用
            print('好好工作,努力挣钱')
            print(stu.__com)
    
    
    s = stu('向上', 12)
    print(dir(s))
    s._stu__work()  # 外部调用私有方法
    s._stu__com  # 外部调用类变量

     

    展开全文
  • Python没有类似于Java的private关键字, 但也可以为类定义私有属性. 只需将属性命名变为以__开头, 例如 __field.示例代码:class Vector2D(object):def __init__(self, x, y):self.__x = float(x)self.__y = float(y)...

    Python没有类似于Java的private关键字, 但也可以为类定义私有属性. 只需将属性命名变为以__开头, 例如 __field.

    示例代码:class Vector2D(object):

    def __init__(self, x, y):

    self.__x = float(x)

    self.__y = float(y)

    self.xx = x

    self.yy = y

    def get_x(self):

    return self.__x # 内部访问

    if __name__ == "__main__":

    v = Vector2D(3, 4)

    print v.__dict__

    print v._Vector2D__x, v.get_x()# 但是可以通过v._Vector2D__x 在外部访问

    v.__x # 外部访问

    输出:{'yy': 4, 'xx': 3, '_Vector2D__x': 3.0, '_Vector2D__y': 4.0}

    3.0 3.0

    Traceback (most recent call last):

    ...

    v.__x

    AttributeError: 'Vector2D' object has no attribute '__x'

    从上面的例子可以看出:

    1. __field被编译器重命名为_className__field

    2. 在class外部不能访问obj.__field, 但在class内部可以

    3. 但是, 这只能防止无意间的调用, 不能防止恶意调用, 用Fluent Python的话来讲, 这是一种safety device, not security device, 用国语来讲, 就是防君子不防xx, 因为可以通过obj._className__field在外部访问obj的私有__field.

    补充知识:python中私有属性和私有方法,修改私有属性的值

    如果一个属性是以两个下划线开始 就标识这个这个属性是一个私有属性self.__money = 1000000

    如果一个方法是以两个下划线开始 也代表已经私有

    子类继承了父类 如果父类的属性私有 将不会被子类继承

    私有属性和私有方法可以在类的里面使用

    自定义类中 如果一个属性进行了私有 在类的外面不能调用

    修改私有属性的值

    如果需要修改一个对象的属性值,通常有2种方法对象名.属性名 = 数据 —- 直接修改

    对象名.方法名() —- 间接修改

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

    def __init__(self):

    self.name = "小明"

    self.__age = 20

    #获取私有属性的值

    def get_age(self):

    return self.__age

    #设置私有属性的值

    def set_age(self, new_age):

    self.__age = new_age

    #定义一个对象

    p = Person()

    #强行获取私有属性

    #崇尚一切靠自觉

    print(p._Person__age)

    print(p.name)

    #想在类的外面获取对象的属性

    ret = p.get_age()

    print(ret)

    #想在类的外面修改对象私有属性的值

    p.set_age(30)

    print(p.get_age())

    以上这篇Python中私有属性的定义方式就是小编分享给大家的全部内容了,希望能给大家一个参考。

    展开全文
  • 类的私有属性和方法Python是个开放的语言,默认情况下所有的属性和方法都是公开的 或者叫公有方法,不像C++和 Java中有明确的public,private 关键字来区分私有公有。Python默认的成员函数和成员变量都是公开的,类的...
  • python默认的成员函数和成员变量都是公开的,python 私有属性和方法没有类似别的语言的public,private等关键词来修饰。 在python中定义私有变量只需要在变量名或函数名前加上 "__"两个下划线,那么这个函数或变量就...
  • python私有属性访问控制

    千次阅读 2018-04-12 23:12:51
    不同于c++,java这些编译型...首先看一段代码,我们想对象的一个属性只能被这个这个对象(即通过类里定义的方法来访问)所访问时,通常会这么写: class Person: def __init__(self, name, age): self.name = name ...
  • 应用场景及定义方式应用场景在实际开发中,对象 的 某些属性或方法 可能只希望 在对象的内部被使用,而 不希望在外部被访问私有属性 就是 对象 不希望公开的 属性私有方法 就是 对象 不希望公开的 方法定义方式在...
  • Python3 私有属性

    千次阅读 2018-01-31 22:04:51
    # 对象的私有属性 class People(object):  """ descrapition 可以写一些类的描述 """  def __init__(self, name):  self.name = name  # 声明一个对象的私有属性  # 私有属性只能在
  • 17.python-私有属性和私有方法

    千次阅读 2019-11-27 21:24:02
    私有属性和私有方法 01. 应用场景及定义方式 应用场景 在实际开发中,对象的某些属性或方法可能只希望在对象的内部被使用,而不希望在外部被访问私有属性就是对象不希望公开的属性 私有方法就是对象不希望...
  • 私有属性和私有方法 应用场景及定义方式 应用场景 在实际开发中,对象的某些属性或方法可能只希望在对象的内部使用,而不希望在外部被访问私有属性 就是 对象 不希望公开的 属性 私有方法 就是 方法 不希望公开的...
  • 1,xx 一般情况下使用的变量 2,_xx 单下划线 在某人模块中,如果变量是 _xx 形式的 import 模块名 变量可正常使用 ...python解释器会对私有属性和私有方法进行 名字重整(改名) 重整原则为:_类名_...
  • python私有属性

    2016-08-23 19:37:08
    python私有属性python中没有private关键字,想要创建一个类私有的变量需要通过命名规则来实现在变量名之前加两个下划线__name,则在类外部就不能直接通过实例.__name访问,具体原理python编译器将其命名修改为了_...
  • python对于类的成员没有严格的访问控制限制,这与其他面对对象语言有区别。 方法本质上也是属性,只不过是可以通过()执行...4、类外部可以通过”__类名 __私有属性(方法)名"访问私有属性(方法) # 测试私有属性 ...
  • 注意,不能直接访问私有属性,但可以通过方法中访问。 举个栗子: class A: __name='class A' def dd(self): print('私有属性') sg=A() sg.dd() print(sg.__name) 运行结果: Traceback (most recent call last...
  • 私有属性 就是 对象 不希望公开的 属性 私有方法 就是 对象 不希望公开的 方法 定义方式 在 定义属性或方法时,在 属性名或者方法名前 增加 两个下划线,定义的就是 私有 属性或方法 class Women: def __init__...
  • 3.类外部不能直接访问私有属性(方法) 4.类外部可以通过“_类名__私有属性(方法)名”访问私有属(方法) 【注】方法本质上也是属性!只不过是可以通过()执行而已。所以,此处讲的私有属性和公有属性,也同时讲解了私有...
  • 如果一个属性是以两个下划线开始 就标识这个这个属性是一个私有属性self.__money = 1000000如果一个方法是以两个下划线开始 也代表已经私有子类继承了父类 如果父类的属性私有 将不会被子类继承私有属性和私有方法...
  • Python 定义私有属性

    千次阅读 2017-09-23 20:58:30
    Python没有类似于Java中的private关键字, 但也可以为类定义私有属性: 将属性命名为: __field.class Vector2D(object): def __init__(self, x, y): self.__x = float(x) self.__y = float(y) self.xx = x self
  • 子类对象不能再自己的方法内部直接访问父类的私有属性和私有方法 子类对象可以通过父类的共有方法间接访问私有属性或私有方法。 class A: def __init__(self): self.num1 = 100 self.__num2 =200 def __test...
  • 我们已经知道了python属性私有化了之后其安全性增加了不少,但是在此时我们去访问私有属性就变得稍显繁琐。先说一下这个‘繁琐’的访问吧。 通过方法调用 这是一种抓住私有化可以从类的内部来访问而出现的一种...
  • 如何在PYTHON里运用私有属性和方法class File:def __init__(self, name):self.name = nameself.code = "ABCDEF"file_A = File("file_A")#假设我们有一个类,叫做文件类,设置一个对象file_A。file_A.code#如果直接...
  • python私有属性访问方法 class Attr(): def __init__(self): self.arg1 = 'public' self.__arg2 = 'private' if __name__ == '__main__': attr = Attr() #public属性获取 print(attr.arg1) ...
  • Python私有属性总结

    2020-08-02 20:49:08
    前言:在前面的博文里,我介绍了Python中的面向对象,详情见:深入浅出Python——Python高级语法之文件操作,本文将主要讲解with open() as读写文件的优点与作用。
  • 私有属性和方法 在实际开发中,对象 的 某些属性或方法 可能只希望 在对象的内部被使用,而 不希望在外部被访问私有属性 就是 对象 不希望公开的 属性 私有方法 就是 对象 不希望公开的 方法 代码 class Girl: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 33,821
精华内容 13,528
关键字:

python访问私有属性

python 订阅