python类的私有属性和公共属性说明

目录
  • python类私有属性和公共属性
  • python私有属性的定义

python类私有属性和公共属性

对于python而言,类的属性的可见度只有两种,public和private。

类的私有属性便是在前面加上“__”标识符,而公共属性则不必。

在类的外面访问私有属性会引发异常。

class Base:
    def __init__(self, value):
        self.__value = value
 
b = Base(5)
print(assert b.__value)
 
Traceback (most recent call last):
  File "/Users/yangjiajia/Desktop/project/python/algebra/test.py", line 19, in <module>
    print(b.__value)
AttributeError: 'Base' object has no attribute '__value'

属性被私有化,即使继承他的字类也不能访问到。

class Parent:
    def __init__(self, value):
        self.__value = value 
 
class Child(Parent):
    def get_value(self):
        return self.__value
 
child = Child(4)
print(child.get_value())
 
Traceback (most recent call last):
  File "/Users/yangjiajia/Desktop/project/python/algebra/test.py", line 24, in <module>
    print(child.get_value())
  File "/Users/yangjiajia/Desktop/project/python/algebra/test.py", line 21, in get_value
    return self.__value
AttributeError: 'Child' object has no attribute '_Child__value'

为何会这样?因为python会对类的私有属性做些转换,以保证private字段的私密性。当编译器看到Child.get_value方法要访问私有属性时,他会先把__value变换为_Child_value然后再进行访问,但实际上该私有属性是_Parent__value。字类无法访问父类的私有属性,只是因为访问的名称不同。

查询该对象的属性字典便知

class Parent:
    def __init__(self, value):
        self.__value = value 
 
class Child(Parent):
    def name(self):
        names = 'yang'
 
    def get_value(self):
        return self.__value
 
child = Child(4)
print(child.__dict__)
 
{'_Parent__value': 4}

python开发的原则还是要少用私有属性,如果需要保证属性不重复,可以在其前面加上单个下划线。

class Parent:
    def __init__(self, value):
        self._value = value 
 
class Child(Parent):
    def get_value(self):
        return self._value
 
child = Child(4)
assert child._value == 4

python私有属性的定义

在Java中用private对变量或者方法进行限定,则方法仅在整个类内部可见,外部不可见、不可访问。

在python中也有私有属性定义,使用函数名前缀的两个下划线进行定义。

例如 __parameter

接下来看上一个Dog的例子

class Dog(object):
    __slots__ = ('__name', 'kind', 'level')
    def __init__(self,name,kind,level):#构造函数,定义属性和初始方法
        self.__name=name
        self.kind=kind
        self.level=level#赋值
        print(f"This is a {self.kind} dog called {self.__name} with level {self.level}")
 
    def run(self):#定义类中的方法
        print(f"{self.__name} is now running!")
 
    def roll_over(self):
        print(f"{self.__name} is now rolling over!")
 
    def change_level(self):
        self.level+=1#修改类中属性的值
        print(f"The level of {self.__name} is now {self.level}")

在另一个文件里面进行调用

from Zoo.Dog import Dog#导包
 
dog=Dog("Halo","Husty",3)#实例化
 
dog.run()
dog.roll_over()
dog.change_level()#调用方法

发现当我们输入以下内容时,会报错,非法访问。

print(dog.__name)

在本例中,__name是对name进行私有限定。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 老生常谈python的私有公有属性(必看篇)

    python中,类内方法外的变量叫属性,类内方法内的变量叫字段.他们的私有公有访问方法类似. class C: __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() 方法.属性的访问于上述方式相似,即:私有成员只能在类内部使用 以上这篇老

  • python基础知识之私有属性和私有方法

    私有权限 面向对象三大特性:封装.继承.多态 封装的意义: 将属性和方法放到一起做为一个整体,然后通过实例化对象来处理: 隐藏内部实现细节,只需要和对象及其属性和方法交互就可以了: 对类的属性和方法增加 访问权限控制. 私有权限:在属性名和方法名 前面 加上两个下划线 __ 类的私有属性 和 私有方法,都不能通过对象直接访问,但是可以在本类内部访问: 类的私有属性 和 私有方法,都不会被子类继承,子类也无法访问: 私有属性 和 私有方法 往往用来处理类的内部事情,不通过对象处理,起到安全作用.

  • Python 私有属性与私有方法

    目录 1.场景定义 2.语法定义 3.调用分析 4.Python伪私有属性和私有方法 1. 场景定义 私有属性: 是指在 Python 的面向对象开发过程中,对象的某些属性只想在对象的内部被使用,但不想在外部被访问到这些属性. 即:私有属性是对象不愿意公开的属性. 私有方法: 是指在 Python 的面向对象开发过程中,对象的某些方法或者称为函数只想在对象的内部被使用,但不想在外部被访问到这些方法或函数. 即:私有方法是对象不愿意公开的方法或函数. 2. 语法定义 在 Python 中定义私有属

  • Python 类的私有属性和私有方法实例分析

    本文实例讲述了Python 类的私有属性和私有方法.分享给大家供大家参考,具体如下: xx:公有变量 _xx:公有变量或方法,不能通过import导入其他模块(只有模块内部使用).类对象和子类可以访问 __xx:私有变量或方法(伪私有),类外部不能直接访问. __xx__:公有变量或方法,子类可以访问.魔法方法或属性(例如:__init__),不推荐这样命名. xx_:公有变量或方法.一般为了避免和python关键字冲突,不推荐这样命名. 在 定义属性或方法时,在 属性名或者方法名前 增加 两个

  • python类的私有属性和公共属性说明

    目录 python类私有属性和公共属性 python私有属性的定义 python类私有属性和公共属性 对于python而言,类的属性的可见度只有两种,public和private. 类的私有属性便是在前面加上“__”标识符,而公共属性则不必. 在类的外面访问私有属性会引发异常. class Base:     def __init__(self, value):         self.__value = value   b = Base(5) print(assert b.__value)

  • python类:class创建、数据方法属性及访问控制详解

    在Python中,可以通过class关键字定义自己的类,然后通过自定义的类对象类创建实例对象. python中创建类 创建一个Student的类,并且实现了这个类的初始化函数"__init__": class Student(object):     count = 0     books = []     def __init__(self, name):         self.name = name 接下来就通过上面的Student类来看看Python中类的相关内容. 类构造和

  • 详解Python类和对象内容

    目录 一.什么是Python类? 二.Python类中的方法和属性 2.1.Python类中的方法 2.2.Python类中的属性 三.面向对象的概念 3.1.Python类:继承 3.2.Python类:多态性 3.3.Python类:抽象 一.什么是Python类? python中的类是创建特定对象的蓝图.它使您可以以特定方式构建软件.问题来了,怎么办?类允许我们以一种易于重用的方式对我们的数据和函数进行逻辑分组,并在需要时进行构建.考虑下图. 在第一张图片(A)中,它代表了一个可以被视为C

  • Python可变和不可变、类的私有属性实例分析

    本文实例讲述了Python可变和不可变.类的私有属性.分享给大家供大家参考,具体如下: 可变和不可变 items = [] print(id(list)) items.append(2) # items值改变了 print(id(list)) # 但内存地址没有变 id()函数获取内存地址. a = "jack" print(id(a)) b = "jack" print(id(b)) # b内存地址和上面a一样 a = "zhangSan" p

  • 举例讲解Python面相对象编程中对象的属性与类的方法

    python 对象的属性 进入正题,来看一个实例来了解python中类,对象中公有属性,私有属性及局部变量,全局变量的区别. root@10.1.6.200:~# cat object.py #!/usr/bin/env python #coding:utf8 class Dave(): var1 = "class atribute,public atrribute var1" #类属性,公有属性var1 __var2 = "class self atribute __var

  • python里运用私有属性和方法总结

    如何在PYTHON里运用私有属性和方法 class File: def __init__(self, name): self.name = name self.code = "ABCDEF" file_A = File("file_A") #假设我们有一个类,叫做文件类,设置一个对象file_A. file_A.code #如果直接调用属性,是可以看到属性里面有什么,但是如果这是个机密的密码不能公布,是不能这么处理的. class File: def __init_

  • Python的代理类实现,控制访问和修改属性的权限你都了解吗

    目录 本篇文章主要内容 代理类的一个简单的实现方式示例 一个实现日志输出的代理类的简化示例 总结 本篇文章主要内容 代理类主要功能是将一个类实例的属性访问和控制代理到代码内部另外一个实例类,将想对外公布的属性的访问和控制权交给代理类来操作,保留不想对外公布的属性的访问或控制权,比如只读访问,日志功能 1.代理类实现被代理类的属性访问和修改权限控制 2.异常捕获代理类的简化示例 代理类的一个简单的实现方式示例 目标:实现类Product的实例属性让另一个类Proxy来代理访问和控制,想将对外公布的

  • 一篇文章彻底搞懂Python类属性和方法的调用

    目录 一.类.对象概述 二.类的定义与使用 三.类属性和类方法的调用 四.私有成员与公有成员 总结 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的. 一.类.对象概述 在面向对象程序设计中,把数据以及对数据的操作封装在一起,组成一个整体(对象),不同对象之间通过消息机制来通信或者同步.对于相同类型的对象进行分类.抽象后,得出共同的特征而形成了类. 类的抽象具体包括两个方面: 1.数据抽象:描述某类对象共有的属性或状态. 2.过程抽象:描述

  • python直接访问私有属性的简单方法

    实例化对象名._类名__私有属性名 class Flylove: price = 123 def __init__(self): self.__direction = 'go beijing .' zIng = 'wait car,many person' if __name__ == '__main__': print Flylove.price fly = Flylove() print fly._Flylove__direction 以上这篇python直接访问私有属性的简单方法就是小编分

随机推荐