首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python 3-从构造函数中授予对'self‘变量的外部访问权限合法吗?

Python 3中,构造函数是用于创建对象并初始化其属性的特殊方法。在构造函数中,通常会使用self参数来引用正在创建的对象。self变量是一个指向对象本身的引用,它允许在类的方法中访问对象的属性和方法。

在Python中,构造函数中授予对self变量的外部访问权限是合法的。因为self变量是一个约定俗成的参数名,它并没有特殊的限制或保护机制。在构造函数中,可以通过将self变量赋值给其他变量,从而在类的外部访问self变量。

然而,需要注意的是,直接访问self变量可能会破坏封装性原则,因为它允许外部代码直接修改对象的属性。为了遵循良好的编程实践,通常建议使用类的公共方法来访问和修改对象的属性,而不是直接访问self变量。

以下是一个示例代码,展示了如何在构造函数中授予对self变量的外部访问权限:

代码语言:txt
复制
class MyClass:
    def __init__(self, value):
        self._value = value

    def get_value(self):
        return self._value

    def set_value(self, new_value):
        self._value = new_value

# 创建对象并初始化属性
obj = MyClass(10)

# 通过公共方法访问和修改属性
print(obj.get_value())  # 输出: 10
obj.set_value(20)
print(obj.get_value())  # 输出: 20

在上述示例中,构造函数__init__中的self变量被用于初始化对象的属性_value。通过定义公共方法get_valueset_value,可以在类的外部访问和修改该属性。

对于Python中的类和对象的更多详细信息,可以参考腾讯云的Python开发者指南:Python开发者指南 | 腾讯云

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++雾中风景1:友元类与面向对象

(以下内容皆为个人理解,有不准确之处望能斧正) 1)友元函数  友元函数是不从属与类函数,除了能够访问私有变量之外,与其他实现在类外部函数无异。...看起来并不会破坏上文提到面向对象逻辑了,但是涉及到继承又存在一些不大不小坑,我们一起来捋一捋: 友元关系不能继承。基类友元派生类成员没有特殊访问权限。...如果基类被授予友元关系,则只有基类具有特殊访问权限,该基类派生类不能访问授予友元关系类。   ...B类A类继承来私有变量 //cout << b.y << endl; C类不可以访问B类私有变量,友元关系不继承,该语句不合法。...依赖类B之中继承友元函数访问类A。(这里同样留一个小问题给大家,如果类B之中fun函数是protected或private,那上述代码还能够正常编译?)

75430

Python面向对象小白入门手把手级别教程

Python对象概念很广泛,Python一切内容都可以称为对象,函数也是对象。...同学可能知道Java私有成员函数是受保护,外界无法进行操作,但是Python是并没有私有成员提供严格访问保护机制。...只能在其类定义内部被访问外部不能直接访问。用于类内部逻辑,不想让类用户直接访问。...__private_method() 调用失败5.属性实例属性:这些属性特定于类每个实例。它们通常在类构造函数 __init__ 定义,并通过 self 关键字与特定实例相关联。...它们不能从类外部直接访问,只能在类内部使用。私有属性通常用于类内部逻辑,不希望外部访问。例子:class MyClass: def __init__(self): self.

34920

Python - 面向对象编程 - 公共属性、保护属性、私有属性

公共属性 在 Python 类里面,所有属性和方法默认都是公共 class PoloBlog: # 公共属性 sum = 0 # 构造方法 def __init__...但Python也可以设置受保护、私有类型变量or方法 私有类型属性、方法 在实际开发,对象某些属性或方法可能只希望在对象内部被使用,而不希望在外部访问到 私有属性:就是对象不希望公开访问属性...外部真的不能访问?...伪私有属性和私有方法 其实 Python ,并没有真正意义上私有,仍然可以在外部访问私有属性、私有方法 因为,在给私有属性、方法命名时,实际是名称做了一些特殊处理,使得外界无法访问到 处理方式:在名称前面加上...,和公共变量没有什么特别大区别 总结 无论是受保护型变量还是私有变量,其实在外部还是能访问,所以并不能真正控制属性访问权限

2.1K20

Python包装授权

1、什么是包装 # -*- coding : utf-8 -*- """     包装类,就是给被包装类加个壳;被包装内实现壳内部,而包装内提供壳外部(接口),有点类似于继承关系,     ...        "构造方法,建立一个内部list对象"         self.innerList = []     def add(self, element):         "添加一个元素...(授权方),授予给没有权利一方(被授权方)。     ...那么python是通过什么来获取权利,或者说是如何接受授权;关键是使用__getattr__内建函数,     在python,使用一个属性时,先到局部搜索,然后到类搜索,最后调用__getattr_..._函数,由于     这一点,我们可以通过这个函数去获取某个对象权限(属性)。

70310

小白学算法-数据结构和算法教程: 反转链表

: # 初始化节点对象构造函数 def __init__(self, data): self.data = data self.next = None class LinkedList...链表其余部分调用reverse。 将其余链表链接到第一个。...请按照以下步骤解决问题: 首先用当前下一个节点更新下一个,即next = current->next 现在建立当前节点到前一个节点反向链接,即 curr->next = prev 如果访问节点是最后一个节点...下面是上述方法实现: #简单尾递归Python程序,用于反转链表 #节点类 class Node: # 用于初始化节点对象构造函数 def __init__(self, data):...辅助空间: O(N),函数调用栈空间 使用Stack反转链表: 这个想法是将所有节点存储在堆栈,然后创建一个反向链表。 请按照以下步骤解决问题: 将节点(值和地址)存储在堆栈,直到输入所有值。

16420

Java 笔记(一)

public new SameMethod() { } 构造构造器就是一方法/函数 方法名与类名相同,可以有多个构造器,允许重载 C 与 Java 相同 Python def __ init__...; } var p = new Person("eeee", "man"); JS 面向对象和其它不同,可以说是面向原型 构造函数完全就是一方法,只是规范此方法首字母大写 访问控制修饰符 Java...保护类、变量、方法和构造方法访问 Java 支持 4 种不同 访问权限 default(即默认,什么也不写): 在同一包内可见,不使用任何修饰符。...使用对象:类、接口、变量、方法 private:在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类) public : 所有类可见。...使用对象:类、接口、变量、方法 protected : 同一包内类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。 C 1.

62220

Python封装

) """ python定义函数代码进行封装,python也是引用传递,而不是值传递 1- 如果函数名一样,python并不会报错,而是会覆盖 def 函数名(参数) """ def...全局变量是等真个程序运行完后进行销毁,作用域是整个函数 1- 如果局部变量名和全局相同,那么执行时候根据就近原则 2- 如果函数内找不到该变量名,那么就去找全局变量 3-...= 20 # 这里告诉函数并非创建新局部变量,而是使用全局变量操作 print("内部num = %s" % num) my_func01() print("外部num = %s" % num...,会继承第一个父类属性和方法,按照集成顺序走init构造方法 2- D类重写父类方法,如果自己d类重写了init方法,那么就不会继承任何父类属性init方法 3- 换句话,子类重写了父类方法...,那么不在使用父类同名方法,包括init构造方法 4- 子类重写了父类方法但是还是想调用父类方法, """ class C(object): def __init__(self): self.num

1.5K20

Python真的有私有化操作

这将是有争议一篇文章 Python真的有私有化操作? 这篇文章,我们将会从这样几个方面进行讲解 面向对象,总会遇到封装概念,封装就会涉及到私有化概念,Python真的有私有化操作?...约定私有化 项目中我们开发公共模块过程,为了和其他语言一样,能给某些特定属性添加合法数据,或者在处理过程中将某些业务实现隐藏在内部,通过公开方法完成合法访问,出现了私有化概念,这里私有化是一种约定私有化操作...)类型外部不可以访问") def public_method(self): """公共方法""" print("外界可以通过类型对象直接调用执行,允许外界访问...在项目开发过程,大家开始语法层面探索私有化解决方案,于是有开发团队开始使用一种新语法格式来实现私有化方案:使用双下划线字符开头变量,这样变量确实在语法上实现了不能被外界直接访问目的。...Python语法是参考ABC语言和C语言语法语义习惯,过度过来一门高级编程语言,吸收了面向对象高级语言特性同时兼容快捷面向过程处理特征,语法已经具备了很多纯面向对象语言通过大量编码才能实现设计模式

1K30

Python--字符串、函数、异常处理、面向对象

全局变量 python函数内定义变量默认都是局部变量,使用global关键字可以使之成为全局变量: def fun(): global info1 info1 = 'hello'...类属性 python类也是一个对象,类属性直接在类内部定义,外部使用类名.属性名进行访问: class Person: clz_attr = "类属性" print(Person.clz_attr...实例属性 实例对象为通过类构造函数创建对象,实例对象和类对象是指向与被指向关系,python实例对象拥有自己属性,实例对象属性定义在类构造函数__init__(): class Person...动态绑定 python函数也可以是一个变量,那么为实例对象赋值一个函数也是可以: class Person: def __init__(self, name, age):...python变量为弱类型,所以函数并不知道传入对象是什么数据类型,这也是python鸭子模型,python并不关系对象,关心只是对象行为,即方法调用: def func(obj):

45420

Python教程第6章 | Python面向对象

封装性 “封装”就是将抽象得到数据和行为(或功能)相结合,形成一个有机整体(即类);封装目的是增强安全性和简化编程,使用者不必了解具体实现细节,而只是要通过外部接口,一特定访问权限来使用类成员...2、外部增加和修改类属性 我们刚刚看了通过类方法来修改类属性,这时我们看下外部如何修改和增加类属性。...构造函数(初始化函数)格式如下: def __init__(self,[...): 初始化函数一样可以传递参数,例如: 2、析构函数 竟然一个在创建时候,会调用构造函数,那么理所当然,这个当一个类销毁时候...那么在 Python 中有没有属性访问控制呢? 一般情况下,我们会使用 __private_attrs 两个下划线开头,声明该属性为私有,不能在类地外部被使用或直接访问。...但是 Python 属性访问控制是靠程序员自觉。为什么这么说呢? 看看下面的示例: 仔细看图片,为什么说双下划线不是真正私有属性呢?

18510

在kubernetes 集群内访问k8s API服务

合法用户进行授权并且随后在用户访问时进行鉴权,是权限管理重要环节。 在 kubernetes 集群,各种操作权限是赋予角色(Role 或者 ClusterRole)。...根据上图: 1.User1 通过 RoleBinding 把 Role 绑定,可以在 Namespace A 获得 Role 权限; 2.User2 和 User3 通过 RoleBinding 把...绑定,这个用户即可在所有的 Namespace 空间中获得 ClusterRole 权限; Service account是为了方便Pod里面的进程调用Kubernetes API或其他外部服务而设计...默认情况下,RBAC策略授予控制板组件、Node和控制器作用域权限,但是未授予“kube-system”命名空间外服务帐户访问权限。这就允许管理员按照需要将特定角色授予服务帐户。...k8s 带给pod环境变量、token以及证书去访问k8s API Server。 ?

1.6K30

Python类和对象

但是「世上无难事只怕有心人」,下面把我这两个概念理解写下来,和大家一起交流学习一下。 Python说「一切皆为对象」,那我们到底应该怎么理解对象呢?他和类又有什么关系呢?...在上面例子代码,我们可以看到构造函数这个名词,构造函数作用是初始化对象特性,在类构造函数不用主动调用,但我们需要知道是,构造函数只能返回None,而不能返回其他值。...我们还要明白Python内部寻找机制:当我们访问实例变量时,先在对象里查找,如果没有,那么就会去类变量列表寻找,所以,最后结果是‘qi-yue'。...刚才我们用Python内置模块__dict__可以很直观得解释上面这种现象,但要注意,我们刚才是在类外部使用,也就是说,在实例方法内部是不能使用__dict__,有兴趣同学可以验证一下。...大家可以看到我给出了两种方法:一种是「类名.类变量」,另一种是self.__class__.类变量。 今天内容,是我花了两天时间才写好,希望大家理解类和对象有帮助。 一起学习Python鸭!

67440

Python类和方法——成员可见性

class Student(): sum = 0 def __init__(self, name, age): # 构造函数 self.name = name...应用场景:定义一个学生类名,在这个类下面,定义分数这个对象,现要给每个学生打一个分数,如果我们允许外部修改分数,那么如果分数修改为-1时,就与逻辑不符,所以,我们需要通过变量私有化,以及在类内部定义一个方法..._Student__score) 4.总结 Python构造函数前面有双下划线,但它却可以外部访问,因为在init后面也有双下划线。...所以,我们命名时不推荐使用__name__、__score__这样形式。 双下划线实例变量并不是一定不能从外部访问 在上面这段代码,print(student1....__score访问,可以将代码改为student2._Student__score就可以实现__score访问了,所以说Python本身没有任何机制阻止你干坏事,一切全靠自觉。

90920

课时37:类与对象:面向对象编程

通常把_ _init_ _()方法称作构造方法,_ _init_ _()魔力体现在只要实例话一个对象,这个方法就会在这个对象被创建时自动调用(在c++里可以看到类似的东西,叫“构造函数”)。...> p.name '小甲鱼' 为了实现类似私有变量特征,Python内部采用了一种叫name mangling(名字改编)技术,在Python定义私有变量只需要在变量名或函数名前加上“_ _”两个下划线...__name AttributeError: 'Person' object has no attribute '__name' 这样在外部变量名“隐藏”起来了,理论上如果要访问,就需要从内部进行:...实际上在外部你使用“_类名_ _变量名”即可访问双下横线开头私有变量了: >>> p...._Person__name '小甲鱼' (注:Python目前私有机制其实是伪私有,Python类是没有权限控制,所有变量都是可以被外部调用。)

36320

Python 面向对象编程

, name, age):self.name = nameself.age = ageprint(“调用构造函数”) 八、析构函数构造函数相反,当类实例需要销毁时候,优先调用析构函数资源进行消毁固定写法...,一般不用传入参数def __del__(self):print(“I Am DEAD…”) 九、访问限制公有变量 vs 私有变量python,所有属性和类成员函数默认公有(python实际上没有绝对私有变量...)公有:在程序,任何代码都可以直接访问,不局限在类内部或类本身私有:除了类本身不允许外部任何代码访问 名字改编技术(name mangling):在私有变量前加上下划线和类名,跟私有变量名连起来组成一个新名字...,在外部可以通过这一方法来访问内部变量 # 私有变量定义:以两个下划线开头,不能以两个下划线结尾例:class Student:def __init__(self, name, age):self.name..._Student__dairy) # 在外部用特殊方法强行访问私有变量

39300

Python详解】Python详细定义与使用案例

这个方法是Python一个特殊方法,类似于其他编程语言中构造函数。每当创建一个类新实例时,Python会自动调用它。...构造函数将设置实例初始状态,即arg1和arg2值,并调用my_method()方法打印"Hello World"。 在方法调用时会自动传递实际参数self。...在构造函数__init__(),使用self.name和self.age来初始化实例属性。在创建Person类实例时,可以通过传递name和age参数值来设置每个实例属性。...七、类访问限制 在类内部可以定义属性和方法,外部则可以直接调用属性和方法来操作数据,从而隐藏了类内部复杂逻辑。然而,Python并没有属性和方法访问权限进行限制。...为了确保类内部某些属性和方法不被外部访问,可以在属性和方法名前面添加单下划线(_foo)、双下划线(__foo)或者首尾加双下划线(foo)来限制访问权限

8410

python提升篇(六)---面向对象

,提升篇则是python更进一步学习,包括具体实例,具体运用,实战篇将会实现具体项目。...'世外居士','IT_001') # 此处是调用类一个方法(函数) Stu.get_data() Stu.welcome() 1.3 代码解读 以上代码我们可以看到,一个类里面可以包含很多变量函数...(单独函数思想),正是因为类特别,外边传进来参数都必须用self.xxx接收,简单说,虽然你外部是传进来参数了,但是我不知道咋个接收,于是,类就说,你们必须先传给我们自己变量,才能用,因此name...值首先赋给self.name,类本身name变量才可以使用,因此后面的函数使用传入参数时,都是self.xx(我们这里是self.name,self.number), 类定义函数时候,输入参数也必须加上...,通过可以访问全部内容,于是我们可以用一个点(.)来访问方法(函数),例如代码:Stu.get_data()就调用了原始类get_data函数,非常简单。

19610

python3 入门 (四) 类与继承

python类与c++类相似,提供了类封装,继承、多继承,构造函数、析构函数。...构造函数类似。...方法运行: 类封装 python通过变量名命名来区分属性和方法访问权限,默认权限相当于c++和javapublic 类私有属性: __private_attrs:两个下划线开头,声明该属性为私有...在python中继承一些特点: 1:在继承基类构造(__init__()方法)不会被自动调用,它需要在其派生类构造亲自专门调用。使用super()....区别于在类调用普通函数时并不需要带上self参数 3:Python总是首先查找对应类型方法,如果它不能在派生类中找到对应方法,它才开始到基类逐个查找。

897120

Python升级之路( Lv6 ) 面向对象基础

属性和方法 属性和方法命名规范总结 相较于Java 使用了关键字类和方法以及属性进行访问权限控制....Python 使用下划线来类, 对象, 属性和方法进行权限控制 具体区别如下: _xxx (方法名称前一个下划线):保护成员, 不能用 from module import * 导入, 只有类对象和子类对象能访问这些成员...(但, 在类外部可以通过 对象名. _类名__xxx 这种特殊方式访问. Python不存在严格意义私有成员) 实例属性 实例属性是从属于实例对象属性, 也称为“实例变量”....类内部可以访问私有属性(方法) 类外部不能直接访问私有属性(方法) 类外部可以通过 _类名__私有属性(方法)名 ”访问私有属性(方法) 注意: 方法本质上也是属性!只不过是可以通过()执行而已....C++ self指针 , JAVA和C# this 关键字 Python, self 必须为构造函数第一个参数, 名字可以任意修改, 但一般都叫做 self.

51220

Python面试题之Python面向对象编程汇总

98 >>> bart.score = 59 >>> bart.score 59 如果想让内部属性不被外部访问,可以把属性名称前加上两个下划线__,在Python,实例变量名如果以双下划线开头,...__name, self.__score)) 改完后,对于外部代码来说,没有什么变动,但是已经无法外部访问到实例变量....特殊变量是可以直接类内部访问。...有些时候,你会看到以一个下划线开头实例变量名,比如_name,这样实例变量外部是可以访问,但是,按照约定俗成规定,当你看到这样变量时,意思就是,“虽然我可以被访问,但是,请把我视为私有变量,不要随意访问...双下划线开头实例变量是不是一定不能从外部访问呢?其实也不是。

1.7K30
领券