相关疑难解决方法(0)

最奇怪的语言特征

在您看来,您遇到的最令人惊讶,奇怪,奇怪或真正的"WTF"语言功能是什么?

每个答案只能有一个功能.

language-agnostic programming-languages

975
推荐指数
176
解决办法
48万
查看次数

在python中定义私有模块函数

根据http://www.faqs.org/docs/diveintopython/fileinfo_private.html:

像大多数语言一样,Python具有私有元素的概念:

  • 私有函数,无法从模块外部调用

但是,如果我定义了两个文件:

#a.py
__num=1
Run Code Online (Sandbox Code Playgroud)

和:

#b.py
import a
print a.__num
Run Code Online (Sandbox Code Playgroud)

当我运行b.py它打印出来,1没有任何例外.diveintopython错了,还是我误解了什么?而且是有一些方法可以定义模块的功能为私有?

python module private function

225
推荐指数
6
解决办法
21万
查看次数

Python中的"私有"(实现)类

我正在编写一个由两部分组成的小型Python模块:

  • 一些定义公共接口的函数,
  • 上述函数使用的实现类,但在模块外部没有意义.

起初,我决定通过使用它在函数内部定义它来"隐藏"这个实现类,但这妨碍了可读性,如果多个函数重用同一个类,则不能使用它.

那么,除了评论和文档字符串之外,是否有一种机制将类标记为"私有"或"内部"?我知道下划线机制,但据我所知它只适用于变量,函数和方法名称.

python access-modifiers

97
推荐指数
7
解决办法
7万
查看次数

Python名称修改

在其他语言中,有助于生成更好代码的一般准则总是尽可能隐藏所有内容.如果对变量是私有还是受保护存在疑问,最好与私有变量一起使用.

对Python来说也是如此吗?我应该首先在所有内容上使用两个前导下划线,并且只在我需要时将它们隐藏起来(只有一个下划线)吗?

如果惯例只使用一个下划线,我也想知道其基本原理.

这是我在JBernardo的回答中留下的评论.它解释了为什么我问这个问题,以及为什么我想知道为什么Python与其他语言不同:

我来自语言,训练你认为一切都应该只是公开的,而不是更多.原因是这将减少依赖性并使代码更安全.反向做事的Python方式 - 从公共开始到隐藏 - 对我来说很奇怪.

python naming-conventions

89
推荐指数
8
解决办法
3万
查看次数

Python中的私有变量和方法

可能重复:
Python中对象名称之前的单下划线和双下划线的含义

对于Python中的私有成员和方法,我应该使用_foo(下划线)或__bar(双下划线)?

python private private-members private-methods

65
推荐指数
3
解决办法
12万
查看次数

Python中的"public"或"private"属性?什么是最好的方法?

在Python中,我有以下示例类:

class Foo:
    self._attr = 0

    @property
    def attr(self):
        return self._attr

    @attr.setter
    def attr(self, value):
        self._attr = value

    @attr.deleter
    def attr(self):
        del self._attr
Run Code Online (Sandbox Code Playgroud)

如您所见,我有一个简单的"私有"属性"_attr"和一个访问它的属性.有很多代码来声明一个简单的私有属性,我认为它不尊重"KISS"哲学来声明所有属性.

那么,如果我不需要特定的getter/setter/deleter,为什么不将所有属性声明为公共属性?

我的答案是:因为封装原则(OOP)说不然!

什么是最好的方法 ?

python oop encapsulation properties

49
推荐指数
5
解决办法
7万
查看次数

在Python中输入安全性

我已经定义了一个Vector有三个属性变量类:x,yz.坐标必须是实数,但没有什么可以阻止人们做以下事情:

>>> v = Vector(8, 7.3, -1)
>>> v.x = "foo"
>>> v.x
"foo"
Run Code Online (Sandbox Code Playgroud)

我可以像这样实现"类型安全":

import numbers

class Vector:
    def __init__(self, x, y, z):
        self.setposition(x, y, z)

    def setposition(self, x, y, z):
        for i in (x, y, z):
            if not isinstance(i, numbers.Real):
                raise TypeError("Real coordinates only")

        self.__x = x
        self.__y = y
        self.__z = z

    @property
    def x(self):
        return self.__x

    @property
    def y(self):
        return self.__y

    @property
    def z(self):
        return self.__z
Run Code Online (Sandbox Code Playgroud)

......但这似乎不是Pythonic.

建议?

python type-safety

24
推荐指数
3
解决办法
1万
查看次数

Python中的私有方法

我想在我的班级中有一个函数,我将只在这个类的方法中使用它.我不会在这些方法的实现之外调用它.在C++中,我将使用在类的私有部分中声明的方法.在python中实现这样一个函数的最佳方法是什么?我想在这种情况下使用静态装饰器.我可以使用没有任何装饰器和self单词的函数

python oop static-methods

15
推荐指数
4
解决办法
3万
查看次数

在Python中,如何编写可以访问私有属性而不暴露它们的单元测试?

我正在努力改进我为Python程序编写单元测试用例的方法.我注意到在某些情况下,访问私有成员以确保方法正常运行会非常有帮助.一个示例案例是在尝试测试方法以确定没有预期返回值而非None的正确行为时.我知道这样做的简单方法就是将私有属性改为受保护属性,并直接测试它们.但是,我想找到一种不会暴露界面的方法.

那么如何测试类中的私有属性而不在接口中公开它们,或者,如果适用的话,更好的方法是测试这样的场景,以便正确的单元测试不一定需要私有属性访问?

python testing tdd unit-testing access-modifiers

14
推荐指数
2
解决办法
1万
查看次数

在 Python 中测试私有方法:单元测试还是功能测试?

在阅读了关于在 Python 中测试私有方法的内容后,具体参考以下接受的答案:如何对方法对象中的方法进行单元测试?,看来最好只测试公共接口。但是,我的班级看起来像这样:

class MyClass:

  def __init__(self):
    # init code

  def run(self):
    self.__A()
    self.__B()
    self.__C()
    self.__D()

  def __A(self):
    # code for __A

  def __B(self):
    # code for __B

  def __C(self):
    # code for __C

  def __D(self):
    # code for __D
Run Code Online (Sandbox Code Playgroud)

本质上,我创建了一个类,用于通过函数管道处理一些输入数据。在这种情况下,最好测试私有函数而不测试公共run()函数吗?做这个的最好方式是什么?

python unit-testing

7
推荐指数
2
解决办法
2万
查看次数