-
2020-12-05 14:33:54
Python菜鸟CSS布局HTML小编今天和大家分享助 类中定义私有属性有什么用啊,为啥最好有个访问私有属性报错的例子,
例子很清楚,你是通过对象的方法来访问这个属性,而不是student1.__name 这种方式。 它的应用也就是,某些属性需要一定的条件才可以访问。 比如一个很常见的权限控制,一个个人信息类,有一个电话号码属性,希望实现经理权限登陆系统。
访问python私有属性问题,如下面描述
class A: def __init__(self): # 定义私有属性 self.__name = "wangwu" 因为Python支持动态属性绑定,当你执行a.__name = "lisi"相当于临时添加了一个__name属性,你不光可以执行a.__name = "lisi",还可以执行a.gender = '1', a.level = 1等等,这些都是一样的,只不过恰好,你添加的属性跟私有属性重名了。
Python怎么修改私有属性
#看你怎么理解这个私有的含义: class Person: def __init__(self, name, gender): self.name = name self.gender = gender class Student(Person): def __init__(self, name, gender, age, snum): super(Student, self).__init__(name, gender)
python 私有属性与方法
class Critter(object): __secretCount = 0 publicCount = 0 def talk (一般来说,想访问类成员变量,要么用类访问,要么用实例访问。实例访问的是实例的副本,类访问的是类的副本。 class A: XXX = 0 def yy(self): pass A.XXX 或者, a = A() a.XXX 如果想从对象访问类的副本,可以先拿到这个实例的类。
python 使用property为什么要定义私有
不是使用property才要私有的,而是为了调用私有方法方便,才使用property的,具体请看下面的详解 在绑定属性时,如果直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改: s = Student()s.score = 9999这显然不
python为什么不设计私有属性
Python如何为类元素(属性和方法)提供私有性的方式 ?
Python如何为类元素(属性和方法)提供私有性的方式 ? 请简述各自的作用域.
Python不支持私有成员。所有Python类中的成员都是公共的,可以从类外部调用或存取的。 所谓成员名前加一条或两条下划线“_func”或“__member”的方式只是一种约定俗成,提示用户这个成员函数或变量只用于内部调用,不是设计给用户使用的。
python私有属性可以继承吗
Python不支持私有成员。所有Python类中的成员都是公共的,可以从类外部调用或存取的。 所谓成员名前加一条或两条下划线“_func”或“__member”的方式只是一种约定俗成,提示用户这个成员函数或变量只用于内部调用。
python 怎么获取父类的私有属性class Text(): def __init__(self): self.__siyou = "这里是私有的" def在Python中就算继承也不能相互访问私有变量,或者父类访问子类的私有属性也不可以。
又来CSS布局HTML小编今天和大家分享助了,大神CSS布局HTML小编今天和大家分享解答 python类继承的问题
一、类定义: class : 类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性 如果直接使用类名修改其属性,那么将直接影响到已经实例化的对象 类的私有属性: __private_attrs 两个下划线开头,声明该属性为私有。
更多相关内容 -
Python中私有属性的定义方式
2021-01-20 01:51:41Python没有类似于Java的private关键字, 但也可以为类定义私有属性. 只需将属性命名变为以__开头, 例如 __field. 示例代码: class Vector2D(object): def __init__(self, x, y): self.__x = float(x) self.__y = ... -
python调用私有属性的方法总结
2020-12-17 03:06:24那么在 python 开发中,我们如何来定义一个私有属性呢?作为约定俗成,我们通常在属性的前面加两个下划线,即__age就代表是一个私有属性。 也许你会有疑问,这个属性是真私有属性还是假私有属性? -
Python私有属性与私有方法
2022-03-21 10:38:271、 场景定义 私有属性 是指在 Python 的面向对象开发过程中,对象的某些属性只想在对象的内部被使用,但不想在外部被访问...在 Python 中定义私有属性和私有方法的语法如下: class Staff: def __init__(self, s_nam.1、 场景定义
私有属性
是指在 Python 的面向对象开发过程中,对象的某些属性只想在对象的内部被使用,但不想在外部被访问到这些属性。
即:私有属性是对象不愿意公开的属性。
私有方法
是指在 Python 的面向对象开发过程中,对象的某些方法或者称为函数只想在对象的内部被使用,但不想在外部被访问到这些方法或函数。
即:私有方法是对象不愿意公开的方法或函数。
2、 语法定义
在 Python 中定义私有属性和私有方法的语法如下:
class Staff:
def __init__(self, s_name, s_salary):
self.s_name = s_name
self.__salary = s_salarydef \_\_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_salarydef \_\_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的私有属性和方法
2021-10-07 17:05:211、私有权限:在属性名和方法名 前面 加上两个下划线 __ 类的私有属性 和 私有方法,都不能通过对象直接访问,但是可以在本类内部访问; 类的私有属性 和 私有方法,都不会被子类继承,子类也无法访问; 私有属性 ...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 调用老师类的私有方法 修改类属性
-
一文搞懂 Python 私有属性 & 私有方法
2022-06-12 16:14:291. 场景定义私有属性是指在 Python 的面向对象开发过程中,对象的某些属性只想在对象的内部被使用,但不想在外部被访问到这些属性。即:私有属性是对象不愿意公开的属性。私有方法是指在 Python 的面向对象开发过程...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 私有属性和私有方法应用场景分析
2020-12-17 09:12:10Python默认的成员函数和成员变量都是公开的,类的私有属性指只有在类的内部使用的属性或方法,表现形式为以“__“ 属性名或方法名以双下划线开头。 class Test(object): __count = 0 # 私有属性 __count def get_... -
python---私有属性
2022-04-17 19:03:23私有权限 封装的意义: 将属性和方法放到一起做为一个整体,然后通过实例化对象来处理; 隐藏内部实现细节,只需要和对象及其属性和方法交互就可以了; 对类的属性和方法增加 访问权限控制。...私有属性 和 私有... -
Python中的私有属性和私有方法
2022-06-18 16:20:52Python中的私有属性和私有方法 -
python之私有属性及私有方法
2017-11-08 14:15:31如果有一个对象,当需要对其进行修改属性时,有2种方法: ...(1)将属性定义为私有属性 (2)添加一个可以调用的方法,供调用,也就是间接调用属性 下面这个是一个错误的例子: class People(object): def __in -
Python 定义私有属性
2017-09-23 20:58:30Python没有类似于Java中的private关键字, 但也可以为类定义私有属性: 将属性命名为: __field.class Vector2D(object): def __init__(self, x, y): self.__x = float(x) self.__y = float(y) self.xx = x self -
Python中的私有属性的定义
2019-02-26 17:49:20在python中也有私有属性定义,使用函数名前缀的两个下划线进行定义。 例如 __parameter 接下来看上一个Dog的例子 class Dog(object): __slots__ = ('__name', 'kind', 'level') def __init__... -
Python之私有属性和私有方法
2022-06-05 15:22:03私有属性和私有方法 -
python私有属性和方法实例分析
2021-01-20 04:13:26本文实例分析了python的私有属性和方法。分享给大家供大家参考。具体实现方法如下: python默认的成员函数和成员变量都是公开的,并且没有类似别的语言的public,private等关键词来修饰。 在python中定义私有变量只... -
实例讲解Python中的私有属性
2020-11-22 19:10:01encoding=UTF-8class A:def __init__(self):# 定义私有属性self.__name = "wangwu"# 普通属性定义self.age = 19a = A()# 正常输出print a.age# 提示找不到属性print a.__name执行输出:Traceback (mos... -
Python中私有属性,修改私有属性、 静态方法、类方法、实例方法
2021-10-07 16:07:44私有权限 类的私有属性 和 私有方法,都不能通过对象直接...私有属性和私有方法 类部调用私有属性和私有方法 class Preson(object): #初始化方法 def __init__(self,name,age): #实例属性 self.name = name... -
Python的私有属性及@property
2022-07-11 10:31:36Python中私有属性是前面加两道下划线,然后在访问时就会报“object has no attribute 。。。”。事实上Python的这种私有属性只是一种规定,通过“_类名__属性名”还是可以读写的,如下例。 所以,Python似乎并没有... -
Python面向对象程序设计之私有属性及私有方法示例
2021-01-01 10:01:24本文实例讲述了Python面向对象程序设计之私有属性及私有方法。分享给大家供大家参考,具体如下: 如果有一个对象,当需要对其进行修改属性时,有2种方法: (1)对象名.属性名=数据—->直接修改 (2)对象名.方法名... -
Python 类的私有属性和私有方法实例分析
2021-01-20 05:32:50本文实例讲述了Python 类的私有属性和私有方法。分享给大家供大家参考,具体如下: xx:公有变量 _xx:公有变量或方法,不能通过import导入其他模块(只有模块内部使用)。类对象和子类可以访问 __xx:私有变量或方法(伪...