等效于
def name(first):
print(first)
name(first = "hello")
采用课程格式?
我正在处理一个在循环内创建kivy screen(s)
的脚本。由于屏幕不是硬编码的,而是从同一类调用的,因此它们最终都是同一屏幕。
我所拥有的
class Account(Screen):
coord = somedict["account_1"]["coordinate_x"]
for i in range(2):
screenmanager.add_widget(Account())
我想做的是
class Account(Screen, acc):
coord = somedict[acc]["coordinate_x"]
for i in range(2):
screenmanager.add_widget(Account(acc=str(i)))
答案 0 :(得分:1)
class Account(Screen):
coord = StringProperty('')
def __init__(self, acc, **kwargs)
super(Account, self).__init__(**kwargs)
self.coord = somedict[acc]["coordinate_x"]
...
for i in range(2):
screenmanager.add_widget(Account(acc=str(i)))
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.properties import StringProperty
from morsecode import morse
# Create both screens. Please note the root.manager.current: this is how
# you can control the ScreenManager from kv. Each screen has by default a
# property manager that gives you the instance of the ScreenManager used.
Builder.load_string("""
#:import choice random.choice
<MorseCode>:
BoxLayout:
orientation: 'vertical'
Label:
text: root.code
Button:
text: 'Random Morsecode'
on_release:
root.manager.current = choice(root.manager.screen_names)
""")
class MorseCode(Screen):
code = StringProperty('')
def __init__(self, acc, **kwargs):
super(MorseCode, self).__init__(**kwargs)
self.code = morse[acc]
# Create the screen manager
sm = ScreenManager()
for i in range(1, 9):
sm.add_widget(MorseCode(str(i), name='morsecode'+str(i)))
class TestApp(App):
def build(self):
return sm
if __name__ == '__main__':
TestApp().run()
答案 1 :(得分:0)
使用类时,这似乎是非常基本的东西,通常在__init__
方法内部完成。那里有很多例子说明了它是如何工作的,所以我认为在这里更详细地说明这一点真的没有用。
以下是适合您情况的摘要:
class Account(Screen):
def __init__(self, acc):
self.coord = somedict[acc]["coordinate_x"]
主要思想不是使coord
成为类属性,而是使实例初始化期间分配的实例属性成为可能,因此对于同一类的每个实例而言,该属性可以是单独的。