是否可以在python中拥有受保护的类变量或方法?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

是否可以在python中拥有受保护的类变量或方法?

2019-02-28 14:18:13 3359 6

是否可以在python中拥有受保护的类变量或方法?我能看到这种用法的例子吗?

取消 提交回答
全部回答(6)
  • 游客aasf2nc2ujisi
    2019-11-18 18:05:17

    python提供两种特殊变量:

    -私有变量 private

    --受保护变量.

    区别,就是第一个不能继承,第二个可以.

    0 0
  • 知钵
    2019-07-17 23:29:44

    Python里一般通过两个"_"来表示访问者希望这个成员变量是私有的,实际上大部分IDE在这种情况下也无法补全,但借助python的反射机制来看,该方法只是把成员变量和类名混合在一起,设置了一个alias别名来禁止IDE或编辑器直接访问,如下:

    # -*- coding: utf-8 -*-
    
    
    class Student:
        def __init__(self, name):
            self.__name = name
    
    
    if __name__ == '__main__':
        s = Student("Charlie")
        for m in dir(s):
            if callable(m):
                continue
            elif m.find("__name") != -1:
                print("alias is {A}".format(A=m))
                print(getattr(s, m))

    在Python3.7下输出
    _Student__name 和"Charlie"

    0 0
  • 腾虎
    2019-07-17 23:29:44

    如果你是一个人写代码的话..你所谓的受保护的变量应该是不会有函数改变的? 那设置全局变量或者私有应该可以达到你的要求吧?
    如果你是协作的写代码的话..好像没有办法.只能默认加 __ 下划线

    0 0
  • 游客drl6uevi2k7uk
    2019-07-17 23:29:44

    Python中没有像C++中public和private这些关键字来区别公有属性和私有属性。它是以属性命名方式来区分,如果在属性名前面加了2个下划线'__',则表明该属性是私有属性,否则为公有属性(方法也是一样,方法名前面加了2个下划线的话表示该方法是私有的,否则为公有的)。

    class Plane(object):

    def __init__(self):

    self.mA = 100

    self.mB = 200

    self.__mC = 300

     
    p  = Plane()

    但是类的方法可以封装__私有属性,如下可以通过Student.get_name访问self.__name

    class Student(object): # 类名的括号里写继承的类,如果没有则写object,这是所有类都要继承的类

        school = '清华大学' # 直接在类中定义的属性为类属性,归Student类所有,所有实例都可以访问到,但是与java的静态变量不同,如果一个实例改变了school的值,那么这个新值就生效,且只对这一个实例生效

        def __init__(self, name, score): # 只要是class中定义的函数,第一个参数都要写self,并且调用时第一个参数都不必传
                                         # init 是特殊函数,在创建类时会调用,相当于java的构造函数
            self.__name = name # 可以直接self.新的变量名,注意,两个下划线开头的变量名为私有变量,不允许外部访问,但可以通过get和set方法访问和赋值
            self.__score = score # 以两个下划线开头且以两个下划线结尾的变量为特殊变量,特殊变量不是私有变量,允许外部访问,因此起变量名时不要起成这种特殊变量的格式

        def get_name(self):
            return self.__name

        def get_score(self):
            return self.__score

        def set_score(self, score):
            if 0 <= score <= 100:
                self.__score = score
            else:
                raise ValueError('bad score') # 手动抛出异常

        def get_grade(self):
            if self.__score >= 90:
                return 'A'
            elif self.__score >= 60:
                return 'B'
            else:
                return 'C'

    0 0
  • 王卡卡
    2019-07-17 23:29:44

    不行

    0 0
  • 一码平川MACHEL
    2019-07-17 23:29:44

    这是不可能的。人们通常使用下划线作为私人会员的惯例。

    关于一般python约定的这个问题可以提供更多信息。

    Python“私有”函数编码约定

    基本上在您的会员名称前加上'_'将向外界表明它是私人的。

    not_private = 0
    _private = 1


    有些约定和良好的样式允许您指示某人不应该修改这些变量或从类外部调用这些方法,但是没有办法严格执行此操作。在Python中基本上没有严格强制的私有或受保护的变量或方法。

    0 0
滑动查看更多
相关问答

1

回答

Python中的类变量的特点是什么?

2021-11-02 16:50:25 114浏览量 回答数 1

1

回答

Python的float() 函数的格式用法是什么?

2021-12-02 23:09:52 104浏览量 回答数 1

1

回答

python函数的format(value [, format_spec])格式化输出格式是什么?

2021-11-06 10:24:58 211浏览量 回答数 1

1

回答

python函数**parameter用法的使用方式是什么?

2021-11-04 18:50:00 435浏览量 回答数 1

1

回答

python的函数os.fstatvfs(fd)的作用是什么?

2021-11-04 20:53:54 121浏览量 回答数 1

1

回答

python函数模块的调用是如何实现的?

2021-11-04 22:20:00 145浏览量 回答数 1

1

回答

python函数传递多个参数时参数的数据类型有什么要求?

2021-11-02 21:28:33 784浏览量 回答数 1

1

回答

Python中readline() 函数的基本语法格式是什么?

2021-11-01 22:02:21 156浏览量 回答数 1

1

回答

Python中help()和dir()函数的用法是什么呢?

2021-11-01 19:39:53 334浏览量 回答数 1

1

回答

Python中dir()函数的用法是什么?

2021-11-01 22:18:51 168浏览量 回答数 1
47
文章
723
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载