小编Mr_*_*s_D的帖子

Python,__slots__,继承和类变量==>属性是只读错误

我有一棵拥有数十万个节点的大树,我正在使用它__slots__来减少内存消耗.我刚刚发现了一个非常奇怪的错误并修复了它,但我不明白我看到的行为.

这是一个简化的代码示例:

class NodeBase(object):
    __slots__ = ["name"]
    def __init__(self, name):
        self.name = name

class NodeTypeA(NodeBase):
    name = "Brian"
    __slots__ = ["foo"]
Run Code Online (Sandbox Code Playgroud)

然后我执行以下操作:

>>> node = NodeTypeA("Monty")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 4, in __init__
AttributeError: 'NodeTypeA' object attribute 'name' is read-only
Run Code Online (Sandbox Code Playgroud)

如果NodeTypeA.name没有定义则没有错误(旁注:该属性是错误的,没有理由在那里).如果NodeTypeA.__slots__从未定义过也没有错误,因此它有一个__dict__.

我不明白的是:为什么超类中存在类变量会干扰在​​子类的槽中设置实例变量?

任何人都可以解释为什么这种组合导致object attribute is read-only错误?我知道我的例子是人为的,并且不太可能是真实程序中的故意,但这并不会使这种行为变得不那么奇怪.

谢谢,
乔纳森

python slots

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

Android SyncAdapter自动初始化同步

我有一个SyncAdapter用于我的应用程序,以及AccountManager将我的应用程序帐户添加到Android帐户管理器.我向帐户管理器添加帐户的代码如下所示:

Bundle data = new Bundle(5);
data.putString(_PEOPLE_ID, people_id);
data.putString(_FIRST_NAME, first_name);
data.putString(_LAST_NAME, last_name);
data.putString(_PLAN, plan);
data.putString(_BIRTHDAY, birthday);
Account account = new Account(username, _ACCOUNT_TYPE);
try {
    boolean created;
    created = _account_manager.addAccountExplicitly(account,
                                   _cryptography.encrypt(_SEED, password), data);
    response.accountCreated(created);
    _account_manager.setAuthToken(account, _TOKEN_TYPE, session_token);
    _model.updateActiveAccount(people_id, username, password);
    SharedPreferences.Editor settings = _settings.edit();
    settings.putString(_ACCOUNT_TYPE, account.name);
    settings.putString(_TOKEN_TYPE, session_token);
    settings.commit();
    // Tells the content provider that it can sync this account
    ContentResolver.setIsSyncable(account, AUTHORITY, 1);
    final Bundle extras = new Bundle(1);
    extras.putBoolean(SYNC_EXTRAS_INITIALIZE, true);
    ContentResolver.addPeriodicSync(account, AUTHORITY, extras, 900);
} catch …
Run Code Online (Sandbox Code Playgroud)

android accountmanager android-syncadapter

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

python argparse - 向没有参数的subparser添加动作?

我正在向我的解析器添加subparsers来模拟子命令功能(例如代码见:python中的简单命令行应用程序 - 解析用户输入?).现在我想添加一个quit不带参数的subparser/command并附加一个"quit"动作.可能吗 ?我该怎么办呢?

python python-2.7 argparse

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

TensorFlow字符串:它们是什么以及如何使用它们

当我读取文件时,tf.read_file我得到了类型的东西tf.string.文档只说它是"可变长度字节数组.Tensor的每个元素都是一个字节数组." (https://www.tensorflow.org/versions/r0.10/resources/dims_types.html).我不知道如何解释这个.

我对这种类型无能为力.在通常的python中你可以通过索引获取元素my_string[:4],但是当我运行以下代码时,我得到一个错误.

import tensorflow as tf
import numpy as np

x = tf.constant("This is string")
y = x[:4]


init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)
result = sess.run(y)
print result
Run Code Online (Sandbox Code Playgroud)

它说

  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/tensor_shape.py", line 621, in assert_has_rank
    raise ValueError("Shape %s must have rank %d" % (self, rank))
ValueError: Shape () must have rank 1

我也无法将我的字符串转换为tf.float32张量.它是.flo文件,它有魔术标题"PIEH".这个numpy代码成功地将这样的头转换为数字(参见这里的例子/sf/answers/1961152861/)但我不能用tensorflow做到这一点.我试过tf.string_to_number(string, out_type=tf.float32)但它说

tensorflow.python.framework.errors.InvalidArgumentError: StringToNumberOp could not correctly convert string: …

python string numpy tensorflow tfrecord

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

git diff --stat排除某些文件

尝试调整来自旺旺的答案以从"git diff"中排除文件以获得--stat标志并失败 - 接受的答案(创建驱动程序)似乎只是unix(重定向到/ bin/true,无论这意味着什么)加上它创建了一个驱动程序将它永久地分配给文件类型,而我正在寻找一个开关来临时禁用文件的差异(或者更确切地说是某些文件).

脚本解决方案:

git diff `git status -s |grep -v ^\ D |grep -v file/to/exclude.txt |cut -b4-`
Run Code Online (Sandbox Code Playgroud)

实际上调用git状态并编辑其​​输出 - 而我想要的是指示git diff本身在计算(简单)--stat(只是更改行)时忽略一些文件.我经历了git-diff文档,但似乎无法找到这样的选项.有人帮我一把吗?

$ git --version
git version 2.6.1.windows.1
Run Code Online (Sandbox Code Playgroud)

git git-diff

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

AlarmManager和BroadcastReceiver而不是Service - 那很糟糕吗?(超时)

背景信息:

我需要大约每小时更新一些来自网络的数据,即使我的应用程序关闭也是如此.更新数据本身大约需要40秒到1分钟.然后将其作为Serializable保存到文件中.我的应用启动时会读取此文件.

这是我为时刻而采取的方法(不使用服务)

像这样使用AlarmManager和BroadcastReceiver:

private void set_REFRESH_DATA_Alarm(){
    mContext = Main.this;
    alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
    broadcast_intent = new Intent(mContext, 
            RepeatingAlarmReceiver_REFRESH_DATA.class);
    pendingIntent = PendingIntent.getBroadcast(mContext, 0,  broadcast_intent, 0);
    // do a REFRESH every hour, starting for the first time in 30 minutes from now ...
    Calendar now = Calendar.getInstance();
    long triggerAtTime = now.getTimeInMillis()+ (1 * 30 * 60 * 1000); // starts in 30 minutes
    long repeat_alarm_every = (1 * 60 * 60 * 1000); // repeat every 60 minutes
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, triggerAtTime, 
            repeat_alarm_every, …
Run Code Online (Sandbox Code Playgroud)

service android broadcastreceiver alarmmanager

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

覆盖python中的类变量

我试图理解Python(2.6)如何处理类,实例等,在某个时刻,我尝试了这段代码:

#/usr/bin/python2.6

class Base(object):
    default = "default value in base"

    def __init__(self):
        super(Base, self).__init__()

    @classmethod
    def showDefaultValue(cls, defl = default):
        print "defl == %s" % (defl)


class Descend(Base):
    default = "default value in descend"

    def __init__(self):
        super(Descend, self).__init__()

if __name__ == "__main__":
    Descend.showDefaultValue()
Run Code Online (Sandbox Code Playgroud)

输出为:"基数默认值"

我想知道为什么"默认"字段没有被Descend类覆盖......有没有办法覆盖它?为什么不被覆盖?

任何提示(或解释页面的链接将不胜感激).谢谢!

python oop inheritance class-design

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

如何正确使用isUserInRole(角色)

防止用户角色执行操作.

  1. 示例1:角色"administrator"是允许执行销毁操作的唯一角色.
  2. 示例2:与"guest"不同的任何角色都可以执行CREATE操作.

在一个真实的案例中,我有这个:

public String delete() {
 if(FacesContext.getCurrentInstance().getExternalContext().isUserInRole("administrator"){
   //.....the action to perform
 }
 return "Denied";
}
Run Code Online (Sandbox Code Playgroud)

我希望我可以使用@RolesAllowed()EJB 的注释,但我不使用EJB而是使用ManagedBeans.所以问题是:有没有办法同时使用多个角色?一些解决方法!示例:如果必须允许对3个角色执行操作(管理员,主持人,经理).我有义务这样做:

if (FacesContext.getCurrentInstance().getExternalContext().isUserInRole("administrator")
    || FacesContext.getCurrentInstance().getExternalContext().isUserInRole("manager") 
    || .....) {
  //....
}
Run Code Online (Sandbox Code Playgroud)

重现所有方法都很痛苦.像数百种方法的东西:(

jsf servlets java-ee

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

流Java 8 api中是否有aggregateBy方法?

浏览Brian Goetz 这个非常有趣但却有一年历史的演示文稿 - 在幻灯片链接中他提出了一个aggregateBy()假设在Stream API中的方法,该方法应该将列表(?)的元素聚合到一个映射(给定一个默认的初始值)以及操作该值的方法(对于重复键也是如此) - 请参阅演示文稿中的下一张幻灯片).

显然,Stream API中没有这样的方法.还有另一种方法可以在Java 8中做类似的事情吗?

java aggregation java-8

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

如何使用python以编程方式计算存档中的文件数

在我保持的程序中,它完成如下:

# count the files in the archive
length = 0
command = ur'"%s" l -slt "%s"' % (u'path/to/7z.exe', srcFile)
ins, err = Popen(command, stdout=PIPE, stdin=PIPE,
                 startupinfo=startupinfo).communicate()
ins = StringIO.StringIO(ins)
for line in ins: length += 1
ins.close()
Run Code Online (Sandbox Code Playgroud)
  1. 这真的是唯一的方法吗?我似乎无法找到任何其他命令,但似乎有点奇怪,我不能只询问文件的数量
  2. 错误检查怎么样?是否足以将其修改为:

    proc = Popen(command, stdout=PIPE, stdin=PIPE,
                 startupinfo=startupinfo)
    out = proc.stdout
    # ... count
    returncode = proc.wait()
    if returncode:
        raise Exception(u'Failed reading number of files from ' + srcFile)
    
    Run Code Online (Sandbox Code Playgroud)

    或者我应该实际解析Popen的输出?

编辑:对7z,rar,zip档案(7z.exe支持)感兴趣 - 但7z和zip对于初学者来说已经足够了

python subprocess 7zip popen python-2.7

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