我是python和编程的初学者。我正在尝试为一些计算编写一个小程序。我有一种材料:混凝土和几种类型。 我创建了一个基础Concrete和几个子类。基类Concrete具有一些对所有子类都相同的属性。
class Concrete:
self.Name = name #
self.Rb = rb #changes depending on concrete subclass
self.alphabt = 0.0001 #equal for every concrete subclass
class concreteB25(Concrete):
self.Name = 'B25'
self.Rb = 25.0
class concreteB30(Concrete):
self.Name = 'B30'
self.Rb = 30.0
用户应该选择一个具体的类。所以我有两个问题:1。如何访问所有子类相等的值(在本例中为alphabt)。 2.我如何保留所选的混凝土?我正在尝试使用QCombobox,但无法弄清楚如何正确使用它进行分配。
import sys
from PyQt5.QtWidgets import (QWidget,QComboBox,QLabel,QApplication)
import materials
class Form(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.lbl = QLabel("Concrete",self)
self.combo = QComboBox(self)
concreteclasses = ['B25', 'B30']
self.combo.addItems(concreteclasses)
self.combo.move(50, 50)
self.combo.activated[str].connect(self.onActivated)
self.setGeometry(300,300,300,200)
self.setWindowTitle('ConcreteComboBox')
self.show()
def onActivated(self, text):
chosenclass = self.combo.itemText(self.combo.currentIndex())
chosenConcrete = None
if chosenclass == 'B25':
chosenConcrete = materials.concreteB25()
else:
chosenConcrete = materials.concreteB30()
在材料中我声明了具体的类。任何人都可以告诉/建议/帮助我做错了或显示相同用法的示例。
提前谢谢你。
答案 0 :(得分:0)
我不使用Qt,所以我无法帮助你处理这方面的事情,但我可以提供一些建议来改善你的课程。
您不需要为不同类型的混凝土创建子类,只需创建Concrete类的实例。为此,您需要为该类提供__init__
方法。
alphabt
属性可以定义为类属性,由类的所有实例共享。
为类提供__repr__
和/或__str__
方法是一个好主意,因此当您将其转换为字符串时,无论是显式还是使用print
时,它都会提供有用的信息。
class Concrete(object):
alphabt = 0.0001
def __init__(self, name, rb):
self.name = name
self.rb = rb
def __repr__(self):
return 'Concrete({0}, {1})'.format(self.name, self.rb)
def make_concrete(name):
return Concrete(name, float(name[1:]))
concreteB25 = make_concrete('B25')
concreteB30 = make_concrete('B30')
print(concreteB25, concreteB30)
print(concreteB25.alphabt, Concrete.alphabt)
<强>输出强>
Concrete(B25, 25.0) Concrete(B30, 30.0)
0.0001 0.0001
请注意,我们可以从.alphabt
实例或Concrete
类本身访问Concrete
属性。
顺便说一下,在Python 2.7及更高版本中,format字符串'Concrete({0}, {1})'
可以简化为'Concrete({}, {})'
。
您可以使用make_concrete
辅助函数在materials
模块中创建一些预定义的具体实例,或者您可以在onActivated
方法中使用它来创建它们“苍蝇“。