标签: double-underscore

Python双下划线修改

我对这种行为感到有点困惑(使用python 3.2):

class Bar:
    pass

bar = Bar()
bar.__cache = None
print(vars(bar))        # {'__cache': None}

class Foo:
    def __init__(self):
        self.__cache = None

foo = Foo()
print(vars(foo))        # {'_Foo__cache': None}
Run Code Online (Sandbox Code Playgroud)

我已经阅读了一些关于双下划线如何导致属性名称被"损坏"的内容,但在上述两种情况下我都希望使用相同的名称.

在对象名称之前单引号和双下划线的含义是什么?

有什么想法在这里发生了什么?

python attributes double-underscore private-methods python-3.x

6
推荐指数
2
解决办法
3167
查看次数

Perl中的双下划线是什么?

我试图在不了解Perl的情况下了解其他人的Perl代码.我很感激你的帮助.

我在这些方面遇到过Perl函数:

MyFunction($arg1,$arg2__size,$arg3)
Run Code Online (Sandbox Code Playgroud)

双重下划线语法是否有意义$arg2,或者它只是第二个参数名称的一部分?

syntax perl double-underscore

5
推荐指数
2
解决办法
2772
查看次数

强调方法意味着什么?

我是Python语言的新手,在执行以下操作时遇到了这种情况:

help(list)
Run Code Online (Sandbox Code Playgroud)

这是我遇到的:

__add__(...)
|      x.__add__(y) <==> x+y
|  
|  __contains__(...)
|      x.__contains__(y) <==> y in x
|  
|  __delitem__(...)
|      x.__delitem__(y) <==> del x[y]
Run Code Online (Sandbox Code Playgroud)

关于这些,有哪些下划线?因为当你正常使用一种方法时我们并没有使用它们(据我所知),我很难理解为什么他们会花时间在文档中用下划线写出来.

python double-underscore

5
推荐指数
2
解决办法
618
查看次数

为什么 python 会在这里损坏

如果没有 cls.txt,为什么这段代码会失败?在 __TEXT 之前

__TEXT = "abcde"

print(__TEXT)
class aaa():
    @classmethod
    def bbb(cls):
        print(__TEXT)

aaa.bbb()
Run Code Online (Sandbox Code Playgroud)

输出是:

abcde
Traceback (most recent call last):
  File "<string>", line 9, in <module>
  File "<string>", line 7, in bbb
NameError: name '_aaa__TEXT' is not defined
Run Code Online (Sandbox Code Playgroud)

如果将 __TEXT 设为类变量并尝试在不使用类前缀的情况下引用它,如下所示:

class aaa():
    __TEXT = "abcde"
    @classmethod
    def bbb(cls):
        print(cls.__TEXT)
        print(__TEXT)

x = aaa()
x.bbb()
Run Code Online (Sandbox Code Playgroud)

你会得到同样的错误,但它没有意义:

abcde
Traceback (most recent call last):
  File "<string>", line 10, in <module>
  File "<string>", line 7, in bbb
NameError: name '_aaa__TEXT' is …
Run Code Online (Sandbox Code Playgroud)

python variables module class double-underscore

5
推荐指数
1
解决办法
116
查看次数

导入__module__ python:为什么下划线?

我是Python新手,已经开始研究其他人编写的代码了.

在从Pypi下载的软件包源代码中,我注意到了使用

import __module__
Run Code Online (Sandbox Code Playgroud)

使用src包文件夹中定义的函数和类.

这是常见做法吗?我实际上无法理解这种语法,你可以向我解释一下或者给我一些参考吗?

python import module double-underscore

4
推荐指数
1
解决办法
1250
查看次数

名称以两个下划线开头的实例属性被奇怪地重命名

根据我的类的当前实现,当我尝试使用类方法获取私有属性的值时,我将其None作为输出。关于我哪里出错的任何想法?

代码

from abc import ABC, abstractmethod

class Search(ABC):
    @abstractmethod
    def search_products_by_name(self, name):
        print('found', name)


class Catalog(Search):
    def __init__(self):
        self.__product_names = {}
    
    def search_products_by_name(self, name):
        super().search_products_by_name(name)
        return self.__product_names.get(name)


x = Catalog()
x.__product_names = {'x': 1, 'y':2}
print(x.search_products_by_name('x'))
Run Code Online (Sandbox Code Playgroud)

python private double-underscore name-mangling

0
推荐指数
1
解决办法
87
查看次数