相关疑难解决方法(0)

什么是使用私有变量的Pythonic方法?

我最近发布了一个关于stackoverflow 的问题,我得到了一个解决方案.

有人向我建议编码风格,我没有收到进一步的意见.我参考先前的查询有以下问题.

  1. 我们如何在python中的类中声明私有变量?我认为通过使用双下划线(__),变量被视为私有.请指正.

  2. 根据之前收到的建议,我们不必使用getter或setter方法.我们不应该使用吸气剂或二传剂或两者兼而有之吗?请让我知道你对此的建议.

python

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

声明内部函数的大多数pythonic方法

我正在编写一个程序,其中im使用两个主要函数,但是这两个函数都使用相同的内部函数。我想知道如何以大多数pythonic方式编写它们?我的观点是将那些帮助程序隐藏在内部某处,并且不要重复帮助程序功能。

def main_function1():
    helper1()
    helper2()
    #dowork1

def main_function2()
    helper1()
    helper2()
    #dowork2

def helper1()
    #workhelp1

def helper2()
    #workhelp2

Run Code Online (Sandbox Code Playgroud)

我能找出的唯一合理的解决方案是用..私有函数声明静态类?但是由于:

Strictly speaking, private methods are accessible outside their class, 
just not easily accessible. Nothing in Python is truly private[...]
Run Code Online (Sandbox Code Playgroud)

我陷入困境,没有想法。

来自:http : //www.faqs.org/docs/diveintopython/fileinfo_private.html

主题:为什么Python的“私有”方法实际上不是私有的?

我也考虑过使用内部帮助程序和切换程序声明一个主要功能,以确定要运行哪个功能,但是我想那是很差的解决方案。

现在,我发现最准确的唯一方法是将普通类声明为:

Strictly speaking, private methods are accessible outside their class, 
just not easily accessible. Nothing in Python is truly private[...]
Run Code Online (Sandbox Code Playgroud)

输出:

#first function#
first helper
second helper
#second function#
first helper
second helper
###
first …
Run Code Online (Sandbox Code Playgroud)

python python-3.x

6
推荐指数
1
解决办法
156
查看次数

在 Javascript 中导入模块未明确导出的内容

在 Javascript 中,有什么方法可以导入(或要求)一个模块没有从该模块导出的对象?

我意识到这可能是不好的做法,但我想知道这是否可能。我有 Python 背景,所以我对我可以导入模块但无法在 Javascript 中访问其所有数据元素的想法感到困惑。

javascript

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

Python:将绑定方法更改为另一个方法

我试图了解python中的绑定方法,并实现了以下代码:

class Point:
    def __init__(self, x,y):
        self.__x=x
        self.__y=y

    def draw(self):
        print(self.__x, self.__y)

def draw2(self):
    print("x",self.__x, "y", self.__y)

p1=Point(1,2)
p2=Point(3,4)
p1.draw()
p2.draw()
p1.draw=draw2
p1.draw(p1)
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,会生成以下输出:

1 2
3 4
Traceback (most recent call last):
  File "main.py", line 17, in <module>
    p1.draw(p1)
  File "main.py", line 10, in draw2
    print("x",self.__x, "y", self.__y)
AttributeError: 'Point' object has no attribute '__x'
Run Code Online (Sandbox Code Playgroud)

为什么我不能在更改p1.draw()之后更改它以使其指向draw2?

python class object

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

你如何在python的模块中测试私有静态方法

我们的python应用程序中有一个静态方法模块。这些方法使用了很多私有(例如:“__do_sub_task2(**args)”)我想在这个模块中为这些私有静态方法编写单元测试,但我收到了引用错误。

有没有办法做到这一点?

更新:添加场景

我有一个名为“my_module.py”的模块文件,该文件的内容如下:

def public_method_foo(my_number):
  return __sub_method_bar(my_number * 10)

def __sub_method_bar(other_number)
  return other_number + 11
Run Code Online (Sandbox Code Playgroud)

更新 #2 我问这个问题的原因是因为我有一个与上面类似的场景,但是当我将以下引用添加到我的 test.py 模块文件时:

from my_module import __sub_method_bar
Run Code Online (Sandbox Code Playgroud)

并尝试在我的测试中使用它,我的测试中出现以下异常

全局名称 '_MyTests__sub_method_bar' 未定义

python unit-testing

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

阻止在Python中访问"private"属性

一个类在多大程度上可以"保护"其中一个属性来自外部访问?

例如,具有常规_secret属性的类,可以轻松访问原始值:

class Paranoid(object):
    def __init__(self):
        self._secret = 0

    def set(self, val):
        self._secret = val * 10

    def get(self):
        return self._secret / 10

p = Paranoid()
p.set(123)
print p.get() # 123
print p._secret # 1230, should be inaccessible
Run Code Online (Sandbox Code Playgroud)

如何使访问_secret变得更加困难?

对此没有实际的应用,我只是好奇是否有新的方法使其更难访问(在Python的上下文中 - 所以忽略了你可以把调试器附加到Python进程并检查内存的事实)

python encapsulation private-members

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

从另一个模块调用python中的私有类成员函数

是否可以调用在另一个类中声明的私有函数?如果是,我需要在我的主文件中调用一个函数。这个函数必须从另一个模块导入。这个函数在一个类中定义如下。

class ConfLoader(object):
.....
    def _set_config_value(self, section, attribute, value):
....
Run Code Online (Sandbox Code Playgroud)

有什么建议 ?

python import class

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

为什么我需要现实生活中的私人方法?

我理解它是如何工作的,我理解语法的含义.但我不明白为什么要使用它?

python private-members

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

创建矩形类

我真的不太了解课程,任何帮助都会很棒。

\n\n

矩形类应具有以下私有数据属性:

\n\n
    \n
  • __length
  • \n
  • __width
  • \n
\n\n

Rectangle 类应该有一个 __init__方法来创建这些属性并将它们初始化为 1。它还应该有以下方法:

\n\n
    \n
  • set_length__length\xe2\x80\x93 该方法为字段赋值

  • \n
  • set_width__width\xe2\x80\x93 该方法为字段赋值

  • \n
  • get_length__length\xe2\x80\x93 该方法返回字段的值

  • \n
  • get_width__width\xe2\x80\x93 该方法返回字段的值

  • \n
  • get_area\xe2\x80\x93 该方法返回 Rectangle 的面积

  • \n
  • __str__\xe2\x80\x93 该方法返回对象\xe2\x80\x99s 状态

  • \n
\n\n

\n\n

class Rectangle:\n\n  def __init__(self):\n      self.set_length = 1\n      self.set_width = 1\n      self.get_length = 1\n      self.get_width = 1\n      self.get_area = 1\n\ndef get_area(self):\n    self.get_area = self.get_width * self.get_length\n    return self.get_area\n\n\ndef main():\n\n  my_rect = …
Run Code Online (Sandbox Code Playgroud)

python class

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

如何在Python类中表示受保护的方法?

阅读这个关于方法排序的问题,我思考了在Python中将受保护的方法放在哪里以及它们应该是私有的_method(self)还是公共的method(self)。我知道 Python 不提供受保护方法的语言功能。

  • 私有:按照约定,以下划线开头的属性是私有的。通常仍然可以从外部访问它们,但不应该。用下划线开头的受保护方法感觉很奇怪,因为不清楚子类实际上重写了该方法而不是声明它自己的实现细节。

  • Public:没有下划线,更有可能有人会查看基类以查看该方法是否已经存在。因此,这对于子类化的人来说更好。然而,想要使用子类的人不知道该方法只是一个实现细节,可能会尝试从外部调用它。

在 Python 中定义受保护方法的首选方法是什么?

python oop inheritance protected

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

如何将__name__用于带有关键字参数的函数?

你如何使用我希望传递关键字参数的函数的名称

例如,我有以下功能:

def func(keyword1='A'):
     print keyword1
Run Code Online (Sandbox Code Playgroud)

我可以做这个:

func.__name__
>> 'func'
Run Code Online (Sandbox Code Playgroud)

但是,我想这样做:

func(keyword1='B').__name__
>>> 'func'
Run Code Online (Sandbox Code Playgroud)

我想这样做的原因是因为我有另一种方法将该函数作为参数接受,它需要拉出函数的名称并使用不同的关键字运行该函数.

所以,我真正想要做的就是让这个功能起作用:

def Function_Name_And_Result(x):
    print x.__name__ + x()

Function_Name_And_Result(func(keyword1='B'))
>> funcB
Run Code Online (Sandbox Code Playgroud)

python function keyword-argument

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

如何在python中定义等效的私有方法

我是java的新手.

在java中我们会有类似的东西

public void func1()
{
    func2();
}

private void func2(){}
Run Code Online (Sandbox Code Playgroud)

但是,在python我想要相当于

def func1(self):
    self.func2("haha")
    pass

def func2(str):
    pass
Run Code Online (Sandbox Code Playgroud)

它抛出了一个错误,只需要1个参数(给定2个)

我已经检查了使用等解决方案

def func1(self):
    self.func2("haha")
    pass

@classmethod 
def func2(str):
    pass
Run Code Online (Sandbox Code Playgroud)

但它不起作用

在func2中取出self会使全局名称func2无法定义.

我如何完全解决这种情况.

python java

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

python私有和公共方法,它们分别用于什么目的?

我几个月来一直在尝试学习使用python 3进行编程,但我陷入了课堂困境。特别是私有和公共方法。

我不明白什么是专用方法。我知道公共方法可以由用户/程序直接访问。但是我无法理解私有方法,它们的用途以及它们为什么存在。

我对Stackoverflow进行了大量研究,但没有找到任何答案。因此,如果这是重复的事,我事先表示歉意。

python methods class python-3.x

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