我对这种行为感到有点困惑(使用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
我试图在不了解Perl的情况下了解其他人的Perl代码.我很感激你的帮助.
我在这些方面遇到过Perl函数:
MyFunction($arg1,$arg2__size,$arg3)
Run Code Online (Sandbox Code Playgroud)
双重下划线语法是否有意义$arg2,或者它只是第二个参数名称的一部分?
我是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)
关于这些,有哪些下划线?因为当你正常使用一种方法时我们并没有使用它们(据我所知),我很难理解为什么他们会花时间在文档中用下划线写出来.
如果没有 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新手,已经开始研究其他人编写的代码了.
在从Pypi下载的软件包源代码中,我注意到了使用
import __module__
Run Code Online (Sandbox Code Playgroud)
使用src包文件夹中定义的函数和类.
这是常见做法吗?我实际上无法理解这种语法,你可以向我解释一下或者给我一些参考吗?
根据我的类的当前实现,当我尝试使用类方法获取私有属性的值时,我将其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 ×5
module ×2
attributes ×1
class ×1
import ×1
perl ×1
private ×1
python-3.x ×1
syntax ×1
variables ×1