相关疑难解决方法(0)

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

有人可以解释在Python中对象名称之前有前导下划线的确切含义吗?另外,解释单个和双重前导下划线之间的区别.此外,无论所讨论的对象是变量,函数,方法等,这个含义是否保持不变?

python naming-conventions

1205
推荐指数
13
解决办法
36万
查看次数

如何在Python中创建模块范围的变量?

有没有办法在模块内部设置全局变量?当我尝试以最明显的方式执行此操作时,如下所示,Python解释器说该变量__DBNAME__不存在.

...
__DBNAME__ = None

def initDB(name):
    if not __DBNAME__:
        __DBNAME__ = name
    else:
        raise RuntimeError("Database name has already been set.")
...
Run Code Online (Sandbox Code Playgroud)

并在将模块导入另一个文件后

...
import mymodule
mymodule.initDB('mydb.sqlite')
...
Run Code Online (Sandbox Code Playgroud)

追溯是: __DBNAME__

有任何想法吗?我正在尝试使用模块来设置单例,根据这个人的建议.

python variables singleton scope module

198
推荐指数
4
解决办法
21万
查看次数

在python中捕获对可变属性的更改

我每次对属性进行更改时都使用属性来执行某些代码,如下所示:

class SomeClass(object):
    def __init__(self,attr):
        self._attr = attr

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

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

    def _on_change(self):
        print "Do some code here every time attr changes"
Run Code Online (Sandbox Code Playgroud)

这非常有用:

>>> a = SomeClass(5)
>>> a.attr = 10
Do some code here every time attr changes
Run Code Online (Sandbox Code Playgroud)

但是如果我存储了一个可变对象attr,attr可以直接修改,绕过setter和我的更改检测代码:

class Container(object):
    def __init__(self,data):
        self.data = data

>>> b = SomeClass(Container(5))
>>> b.attr.data = 10
>>>
Run Code Online (Sandbox Code Playgroud)

让我们假设它attr只会用于存储类型的对象Container.是否有修改一个优雅的方式SomeClass和/或 …

python

13
推荐指数
2
解决办法
3461
查看次数

在Python中声明私有变量

我在写一个银行应用程序Python,并从这里读了一些源代码的银行应用程序.该balance课程定义如下:

class Balance(object):
    """ the balance class includes the balance operations """

    def __init__(self):
        """ instantiate the class """
        self.total = 0

    def add(self, value):
        """ add value to the total
        Args:
            value (int): numeric value
        """
        value = int(value)
        self.total += value

    def subtract(self, value):
        """ subtract value from the total
        Args:
            value (int): numeric value
        """
        value = int(value)
        self.total -= value
Run Code Online (Sandbox Code Playgroud)

我的问题

由于不应该在类之外访问余额细节,我们应该定义属性self.total,self.__total因为我们应该使它变得private相当public可变?我的思路是否正确?

python oop private-members python-2.7 public-members

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

Python:未解析的静态变量类的引用

所以我得到了这段代码:

class MyClass:

    ACTIONS = {
        "ACTION_A": MyClass.__a,
        "ACTION_B": MyClass.__b
    }

    @staticmethod
    def do(constant):
        ACTIONS[constant]()

    @staticmethod
    def __a():
        print("A")

    @staticmethod
    def __b():
        print("B")
Run Code Online (Sandbox Code Playgroud)

我正在尝试将私有__a__b函数映射到静态字典,因此我可以使用方法do执行函数.

尝试运行此代码时,我得到错误:ACTIONS字典的每一行上的" 未解析的引用'MyClass' " .

有关如何使其正常工作的任何想法?

python

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