精华内容
下载资源
问答
  • python私有属性和方法
    2020-11-25 22:20:05

    python默认的成员函数和成员变量都是公开的,python 私有属性和方法没有类似别的语言的public,private等关键词来修饰。 在python中定义私有变量只需要在变量名或函数名前加上 "__"两个下划线,那么这个函数或变量就会为私有的了。 在内部,python使用一种 name mangling 技术,将 __membername替换成 _classname__membername,所以你在外部使用原来的私有成员的名字时,会提示找不到。 比如:

    class Person:

    def __init__(self):

    self.__name = 'haha'#私有属性

    self.age = 22

    def __get_name(self):##私有方法

    return self.__name

    def get_age(self):

    return self.age

    person = Person()

    print person.get_age()

    print person.__get_name()

    运行结果是:22 Traceback (most recent call last): File "E:\pythoner\zenghe\jay.py", line 38, in print person.__get_name() AttributeError: Person instance has no attribute '__get_name'

    我们这里定义的__name是私有属性,__get_name()是私有方法。如果直接访问的话,会提示找不到相关的属性或者方法,但是如果你真要访问私

    有的相关数据的话, 也是可以访问的,严格地说,私有方法在它们的类外是可以访问的,只是不容易 处理。在 Python

    中没有什么是真正私有的;在内部,私有方法和属性的名字被忽然改变和恢复,以致于使得它们看上去用它们给定的名字是无法使用的

    更多相关内容
  • 本文实例分析了python私有属性和方法。分享给大家供大家参考。具体实现方法如下: python默认的成员函数和成员变量都是公开的,并且没有类似别的语言的public,private等关键词来修饰。 在python中定义私有变量只...
  • 类的私有属性和方法 Python是个开放的语言,默认情况下所有的属性和方法都是公开的 或者叫公有方法,不像C++和 Java中有明确的public,private 关键字来区分私有公有。 Python默认的成员函数和成员变量都是公开的,类...
  • Python私有属性和方法

    2021-12-21 14:16:37
    # 私有属性和方法 # 定义一个父类 class Person(object): # 初始化方法 def __init__(self, name, age): # 实例属性 self.mingzi = name # 私有属性 self.__nianling = age # 私有方法 def __drink(self): ...
    # 私有属性和方法
    # 定义一个父类
    class Person(object):
        # 初始化方法
        def __init__(self, name, age):
            # 实例属性
            self.mingzi = name
            # 私有属性
            self.__nianling = age
    
        # 私有方法
        def __drink(self):
            print('哈啤酒')
            pass
    
        pass
    
    
    p = Person('xiaosun', '24')
    print(p.mingzi)
    #尝试调用私有方法
    print(p.__drink)

    运行结果:

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

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

    # 私有属性和方法
    # 定义一个父类
    class Person(object):
        # 初始化方法
        def __init__(self, name, age):
            # 实例属性
            self.mingzi = name
            # 私有属性
            self.__nianling = age
    
        # 私有方法
        def __drink(self):
            print('是私有方法')
            pass
        def attribute_A(self):
            return self.__nianling
        def attribute_B(self):
            return self.__drink()
        pass
    
    
    p = Person('xiaosun', '24')
    #通过func——attribute_A来调用类的私有属性
    print(p.attribute_A())
    #通过func——attribute_B来调用类的私有方法
    p.attribute_B()
    

    输出结果:

     

    展开全文
  • 一文搞懂 Python 私有属性 & 私有方法

    千次阅读 2022-06-12 16:14:29
    1. 场景定义私有属性是指在 Python 的面向对象开发过程中,对象的某些属性只想在...2. 语法定义在 Python 中定义私有属性和私有方法的语法如下: (1). __salary是以两个下划线开头来定义的私有属性。(2). __secret

    1. 场景定义

    私有属性

    是指在 Python 的面向对象开发过程中,对象的某些属性只想在对象的内部被使用,但不想在外部被访问到这些属性。

    即:私有属性是对象不愿意公开的属性。

    私有方法

    是指在 Python 的面向对象开发过程中,对象的某些方法或者称为函数只想在对象的内部被使用,但不想在外部被访问到这些方法或函数。

    即:私有方法是对象不愿意公开的方法或函数。

    2. 语法定义

    在 Python 中定义私有属性和私有方法的语法如下:

    class Staff:
        def __init__(self, s_name, s_salary):
          self.s_name = s_name
          self.__salary = s_salary
          
        def __secret(self):
          print("%s 的工资是 %d" % (self.s_name, self.__salary))
    
    

    (1). __salary是以两个下划线开头来定义的私有属性

    (2). __secret(self)是以两个下划线开头来定义的私有方法

    3. 调用分析

    (1). 在__init__的对象初始化方法中,以两个下划线开头定义的__salary属性就是私有属性。

    现在在对象的外部来调用一下__salary属性,看是否能正常访问该私有属性。

    从上图运行结果可以看出,第11行,即在对象外部访问对象的私有属性 __salary 时,提示 AttributeError 错误,Staff 对象 zhangsan 没有属性 __salary。

    为了证明 Staff 类对象确实是有__salary 这个实例属性的,只是因为在对象外部不能访问私有属性。

    我把 self.__salary 修改为:self.salary,__secret(self)方法对self.__salary属性的引用,做相应的修改,看如下图所示的运行结果。

    可以从运行结果看出,这种非私有属性在外部的调用是正常的,没有提示 AttributeError 错误。

    (2). 在 __secret(self) 实例方法中,以两个下划线开头定义的__secret(self)方法就是私有方法。

    和上面测试流程一样,先在对象的外部来调用私有方法__secret(self),看是否能正常调用该私有方法。

    从上图运行结果可以看出,第11行,即在对象外部访问对象的私有方法 __secret(self) 时,提示 AttributeError 错误,Staff 对象 zhangsan 没有 __secret 方法。

    为了证明 Staff 类对象是有__secret(self)这个实例方法的,只是因为在对象外部不能访问私有方法。

    我把 __secret(self) 方法修改为:secret(self),其他代码不变,看如下图所示的运行结果。

    可以从运行结果看出,这种非私有方法在外部的调用是正常的,没有提示 AttributeError 错误。

    (3). 从下图可以看出,在对象内部私有方法与私有属性是可以被调用的。

    如图中的 work 方法调用了私有方法__secret(self),而私有方法__secret(self)调用了私有属性__salary。

    在对象外部使用 Staff 类对象 zhangsan 来调用 work 方法,可以间接访问到对象的私有属性和私有方法。

    从控制台输出结果来看 work 方法能正常访问到对象内部定义的私有属性和私有方法。

    4. Python伪私有属性和私有方法

    在 Python 中,并没有真正意义上的私有,因为 Python 内部在给属性、方法命名时,对名称做了一些特殊处理,使得外界无法访问到对应的属性和方法。

    以私有属性和私有方法为例,Python内部处理方式为:

    (1). 属性: __salary,经过处理后的属性名为:_Staff__salary(_类名__属性名)

    (2). 方法: __secret,经过处理后的方法名为:_Staff__secret(_类名__方法名)

    知道了 Python 内部对于私有属性和私有方法的处理,现在使用这种处理后的命名方式来在对象外部访问私有属性和私有方法,看是否能访问正常。

    class Staff:
        def __init__(self, s_name, s_salary):
            self.s_name = s_name
            self.__salary = s_salary
    
        def __secret(self):
            return "%s的工资是 %d" % (self.s_name, self.__salary)
    
    
    zhangsan = Staff("张三", 10000)
    print(zhangsan._Staff__salary)
    print(zhangsan._Staff__secret())
    

    运行结果如下图所示

    控制台没有抛任何的异常,之前的提示 AttributeError 错误也没有了。

    这个例子证明了 Python 是没有真正意义上的私有的,当知道了其内部处理方式后,依然可以使用_类名__属性名(方法名)的方法来在对象外部访问到对象内部定义的私有属性和私有方法。

    但这种方式在日常工作中是不推荐使用的,既然在对象内部定义属性和方法时,就声明了其为私有的,调用方就需要遵守其规则。

    这里只是想通过这个小例子来说明 Python 并无真正意义上的私有。

    欢迎关注【无量测试之道】公众号,回复【领取资源】

    Python+Unittest框架API自动化、

    Python+Unittest框架API自动化、

    Python+Pytest框架API自动化、

    Python+Pandas+Pyecharts大数据分析、

    Python+Selenium框架Web的UI自动化、

    Python+Appium框架APP的UI自动化、

    Python编程学习资源干货、

    Vue前端组件化框架开发、

    资源和代码 免费送啦~
    文章下方有公众号二维码,可直接微信扫一扫关注即可。

    备注:我的个人公众号已正式开通,致力于IT互联网技术的分享。

    包含:数据分析、大数据、机器学习、测试开发、API接口自动化、测试运维、UI自动化、性能测试、代码检测、编程技术等。

    微信搜索公众号:“无量测试之道”,或扫描下方二维码:

    在这里插入图片描述  

    添加关注,让我们一起共同成长!

    展开全文
  • 主要介绍了Python私有属性私有方法应用场景解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • Python中的私有属性和私有方法

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

    1、通常我们约定,两个下划线开头的属性是私有的(private)。其他为公共的(public);
    2、类内部可以访问私有属性(方法);
    3、类外部不能直接访问私有属性(方法);
    4、类外部可以通过 ”_类名__私有属性(方法)名“ 访问私有属性(方法)

    定义私有属性/方法

    class Demo:
        __price = 25.8
    
        def __init__(self, u_name, u_age):
            self.uname = u_name
            self.__uage = u_age
    
        def __age(self):
            print("这是私有方法")
            print("调用共有属性:", self.uname)
            print("调用私有属性:", self.__uage)
            print("调用私有类属性:", self.__price)
    
        def name(self):
            print("这是公有方法")
            print("调用共有属性:", self.uname)
            print("调用私有属性:", self.__uage)
            print("调用私有类属性:", self.__price)
    

    使用 dir()函数可以查看对象内的所有的属性和方法,

    在 python 中任何东西都是对象,一种数据类型,一个模块等,都有子集的属性和方法,除了常用的方法外,其他的你不需要全部记住它,交给 dir() 函数就好了。

    d = Demo('Tom', 18)
    print(dir(d))
    """
    ['_Demo__age', '_Demo__price', '_Demo__uage', '__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__', 'name', 'uname']
    """
    

    这些打印出来的属性(方法)是可以直接调用的。从打印的结果可以看到,私有属性 __age()__price__uage 这三个私有属性(方法)都变成了_Demo__age,_Demo__price, _Demo__uage,也就可以看出,私有属性(方法)在Python中是不允许直接去调用的,类外部可以通过 _类名__私有属性(方法)名访问私有属性(方法)

    调用属性(方法)

    '''
    学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006
    寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
    '''
    
    # 调用共有方法
    d.name
    """
    这是公有方法
    调用共有属性: Tom
    调用私有属性: 18
    调用私有类属性: 25.8
    """
    
    # 调用私有方法(错误示范)
    d.__age()
    """
    Traceback (most recent call last):
      File "D:/Local/PycharmProjects/private_obj/demo.py", line 32, in <module>
        d.__age()
    AttributeError: 'Demo' object has no attribute '__age'
    """
    
    # 调用私有方法(正确示例)
    d._Demo__age()
    d._Demo__
    """
    这是私有方法
    调用共有属性: Tom
    调用私有属性: 18
    调用私有类属性: 25.8
    """
    
    # 调用私有属性
    print(Demo._Demo__price) # 25.8
    print(d._Demo__uage) # 18
    

    【注】方法本质上也是属性!只不过是可以通过()执行而已。

    展开全文
  • 1、 场景定义 私有属性 是指在 Python 的面向对象开发过程中,对象的某些属性只想在对象的内部被使用,但不想在外部被访问...在 Python 中定义私有属性和私有方法的语法如下: class Staff: def __init__(self, s_nam.
  • python私有属性和方法

    千次阅读 2021-10-07 17:05:21
    2、私有方法和私有属性,子类通过调用通过实例化方法调用私有属性和方法,不能直接调用 3、私有属性,可以在类内部通过self调用,但不能通过对象访问 私有方法,可以在类内部通过self调用,但不能通过对象...
  • 那么在 python 开发中,我们如何来定义一个私有属性呢?作为约定俗成,我们通常在属性的前面加两个下划线,即__age就代表是一个私有属性。 也许你会有疑问,这个属性是真私有属性还是假私有属性
  • 本文实例讲述了Python 类的私有属性和私有方法。分享给大家供大家参考,具体如下: xx:公有变量 _xx:公有变量或方法,不能通过import导入其他模块(只有模块内部使用)。类对象和子类可以访问 __xx:私有变量或方法(伪...
  • python3中的私有属性和方法是以__两个下划线开头的:class Woman(object): #定义一个woman类def __init__(self,name):self.name = name #公有属性self.__age = 22 #私有属性def __money(self): #私有方法print(...
  • python默认的成员函数和成员变量都是公开的,python私有属性和方法没有类似别的语言的public,private等关键词来修饰。 在python中定义私有变量只需要在变量名或函数名前加上 "__"两个下划线,那么这个函数或变量就会...
  • 1、私有属性 这个我们可以实例化对象来拿到name属性的值的 我们看到用实例化对象来获取__age属性的值是获取不到的,那个12是我在本类中输出的,可以在本类中使用 私有方法 1.1、我们无法从外部来调用__da这...
  • python如何调用私有属性与私有方法?

    千次阅读 2022-03-04 14:07:59
    很多同学在学习到类与实例的时候,都了解过私有属性与私有方法的概念.但是却不知道如何调用它们?今天就告诉大家如何调用私有属性与私有方法. 我们先定义一个类,里面有私有属性与私有方法 class Class1: __str1 = '...
  • 私有属性和私有方法
  • 本文实例讲述了Python面向对象之私有属性和私有方法。分享给大家供大家参考,具体如下: 01. 应用场景及定义方式 应用场景 在实际开发中,对象 的 某些属性或方法 可能只希望 在对象的内部被使用,而 不希望在外部被...
  • 本文实例讲述了Python面向对象程序设计之私有属性及私有方法。分享给大家供大家参考,具体如下: 如果有一个对象,当需要对其进行修改属性时,有2种方法: (1)对象名.属性名=数据—->直接修改 (2)对象名.方法名...
  • python默认的成员函数和成员变量都是公开的,python 私有属性和方法没有类似别的语言的public,private等关键词来修饰。 在python中定义私有变量只需要在变量名或函数名前加上 "__"两个下划线,那么这个函数或变量就...
  • 1.在一个类中,写了__str__(self)方法和不写的区别 class User(object): def __init__(self,name,age,gender): self.name = name self.age = age self.gender = gender def __str__(self): return "name = ...
  • 关于私有属性和私有方法: 1,两个下划线开头的属性是私有的(private)。其他为公共的(public). 2,类内部可以访问私有属性(方法); 3,类外部不能直接访问私有属性(方法); 4,类外部可以通过“__类名__私有属性...
  • 1、 封装的意义: 将属性和方法放到一起做为一个整体,然后通过实例化对象来处理; 隐藏内部实现细节,只需要和对象及其属性和方法交互就可以了; 对类的属性和方法增加 访问权限控制。...2、调用私有属性和..
  • 实例化对象名._类名__私有属性名 class Flylove: price = 123 def __init__(self): ...以上这篇python直接访问私有属性的简单方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大
  • 私有属性方法——Python并没有真正的私有化支持,但可用下划线得到伪私有尽量避免定义以下划线开头的变量 (1)_xxx "单下划线 " 开始的成员变量叫做保护变量,意思是只有类对象(即类实例)子类对象自己能访问...
  • 总结: 子类继承父类时,直接在子类后(父类) 私有属性的定义:用单下划线+属性——( _属性 ),私有属性和方法可以直接调用 名称改写 遇到父类和子类中的方法同名时需要改写 要用双下划线开始——( __属性或...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 56,949
精华内容 22,779
关键字:

python私有属性和方法