小编San*_*o98的帖子

Python:使用用户输入作为类名的类工厂

我想动态地将类atttributes添加到超类.此外,我想创建动态继承自这个超类的类,这些子类的名称应该取决于用户输入.

有一个超类"单元",我可以在运行时添加属性.这已经有效了.

def add_attr (cls, name, value):
    setattr(cls, name, value)

class Unit(object):
    pass

class Archer(Unit):
    pass

myArcher = Archer()
add_attr(Unit, 'strength', 5)
print "Strenght ofmyarcher: " + str(myArcher.strength)
Unit.strength = 2
print "Strenght ofmyarcher: " + str(myArcher.strength)
Run Code Online (Sandbox Code Playgroud)

这导致了期望的输出:
肌肉的强度:5个
强度的肌肉:2

但是现在我不想预定义子类Archer,但我宁愿让用户决定如何调用这个子类.我尝试过这样的事情:

class Meta(type, subclassname):
    def __new__(cls, subclassname, bases, dct):
    return type.__new__(cls, subclassname, Unit, dct)

factory = Meta()    
factory.__new__("Soldier")  
Run Code Online (Sandbox Code Playgroud)

但没有运气.我想我还没有真正理解这里的功能.我想要的结果是

class Soldier(Unit):
    pass
Run Code Online (Sandbox Code Playgroud)

由工厂创建.如果我用"Knight"这个参数调用工厂,我会想要创建一个类Knight,Unit的子类.

有任何想法吗?提前谢谢了!
再见 -
萨诺

python factory metaprogramming metaclass

11
推荐指数
2
解决办法
4719
查看次数

如何将变量连接到Entry小部件?

我试图将变量与Tkinter条目小部件相关联,其方式如下:

  1. 每当我更改条目的值("内容")时,主要是通过在其中键入内容,变量会自动分配给我输入的值.没有我必须按下"更新值"按钮或类似的东西.

  2. 每当变量(通过程序的其他部分)发生变化时,我希望自动调整显示的条目值.我相信这可以通过textvariable工作.

我在http://effbot.org/tkinterbook/entry.htm上阅读了这个例子,但它并没有完全帮助我实现我的想法.我觉得有一种方法可以确保使用条目"验证"的第一个条件.有任何想法吗?

python variables validation tkinter tkinter-entry

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

Python:类属性的继承(列表)

继承超类的类属性,稍后更改子类的值可以正常工作:

class Unit(object):
    value = 10

class Archer(Unit):
    pass

print Unit.value
print Archer.value

Archer.value = 5

print Unit.value
print Archer.value
Run Code Online (Sandbox Code Playgroud)

导致输出:
10
10
10
5
这很好:Archer继承了Unit的值,但是当我改变Archer的值时,Unit的值保持不变.

现在,如果继承的值是列表,则浅拷贝效果会发生,并且超类的值也会受到影响:

class Unit(object):
    listvalue = [10]

class Archer(Unit):
    pass

print Unit.listvalue
print Archer.listvalue

Archer.listvalue[0] = 5

print Unit.listvalue
print Archer.listvalue
Run Code Online (Sandbox Code Playgroud)

产量:
10
10
5
5

从超类继承列表时,有没有办法"深度复制"列表?

非常感
谢佐诺

python inheritance list deep-copy class-attributes

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