首页
学习
活动
专区
工具
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,那上述代码还能够正常编译?)

77530

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

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

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

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

    2.2K20

    Python包装授权

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

    71710

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

    : # 初始化节点对象构造函数 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反转链表: 这个想法是将所有节点存储在堆栈,然后创建一个反向链表。 请按照以下步骤解决问题: 将节点(值和地址)存储在堆栈,直到输入所有值。

    18020

    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

    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.

    63920

    Python真的有私有化操作

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

    1.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):

    48420

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

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

    20310

    在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鸭!

    69440

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

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

    38620

    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本身没有任何机制阻止你干坏事,一切全靠自觉。

    95720

    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) # 在外部用特殊方法强行访问私有变量

    40800

    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函数,非常简单。

    20710

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

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

    16910

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

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

    1.8K30

    跳表设计思路,值得你拥有

    假如对链表进行改造,先链表每两个节点建立第一级索引,再第一级索引每两个节点建立第二级索引。..._forwards = [] # 存放类似指针/引用数组,占用空间很小 这里 _data 是 ListNode 变量,前而加 _data 表示这是一个私有变量,虽然你能在类外部修改它,但你最好不要这样做...(Python 在编码规范上并不阻止你做一些破坏(灵活),全靠你自觉) _data 这里是做比较用,在实际应用,你可以这样写: class ListNode: def __init__(self...,姑且按指针来理解,虽然Python并没有指针概念。...其实写不出实现跳表代码也无妨,其实每一种语言都已经实现了跳表,只要掌握其核心思想,直接拿来用就可以了。 下面是 python 关于跳表三方库,你不需要重复造轮子了。阅读原文访问下面的链接。

    41040

    Python 基础(十一):面向对象

    1 简介 面向对象(OOP)是一种现实世界理解和抽象方法,对象含义是指在现实生活能够看得见摸得着具体事物,一句比较经典描述是一切皆对象,Python 是一门面向对象语言,面向对象编程简单来说就是一种封装代码方式...面向对象相关概念 类:描述具有相同属性和方法集合,简单来说就是一个模板,通它来创建对象。 对象:类实例。 方法:类定义函数。 类变量:定义在类且在函数之外变量,在所有实例化对象公用。...局部变量:方法定义变量,只作用于当前实例。 面向对象三大特性 封装:隐藏对象属性和实现细节,仅对外提供公共访问方式,提高复用性和安全性。...2 基本操作 2.1 类 Python 定义使用 class 关键字,语法如下所示: class 类名: 属性 ... 方法 ......pass 需要强调一点是:外部不能访问私有属性和调用私有方法,自然 Cat.

    29520
    领券