如果我要实现一个类,例如:
class LinkedList:
def __init__(self):
self.head = None
def size(self):
self.count = 0
self.current = self.head
while self.current != None:
self.current = self.current.get_next()
self.count += 1
return self.count
size
方法在self.
和count
变量不使用current
的情况下可以正常工作,所以我想知道:
为什么count
和current
无论是否有self.
都有效,而self.head
没有它就无法工作?< / p>
在不一定需要self.
的情况下使用<resource-file src="src/android/libs/armeabi/libserial_port.so" target="libs/armeabi/libserial_port.so">
通常是不好的做法吗?
答案 0 :(得分:0)
这里使用和不使用Builder.load_string('''
#:import AnchorLayout kivy.uix.anchorlayout
#:import Layout kivy.uix.layout
<ChatBotScreen>:
BoxLayout:
orientation: 'vertical'
ScrollView:
Label:
size_hint_y: None
height: self.texture_size[1]
text_size: self.width, None
botOutput: root.botOutput
ScrollView:
Label:
size_hint_y: None
height: self.texture_size[1]
text_size: self.width, None
userInput: root.userInput
TextInput:
id: ti_userinput
multiline: False
on_text_validate: root.on_text_validate()
''')
class ChatBotScreen(Screen):
userInput = StringProperty()
botOutput = StringProperty()
def on_text_validate(self):
text_input_userInput = self.ids['ti_userinput'].text
self.ids['ti_userinput'].text = ''
print(text_input_userInput)
sm = ScreenManager(transition=FadeTransition())
sm.add_widget(ChatBotScreen(name='mainchat'))
class MyApp(App):
def build(self):
return sm
之间存在差异。
如果您使用trailer
,实际上是在self.
上调用的任何对象中添加self.
和count
属性。
如果您不使用current
,则需要在size
方法中定义名为self.
和count
的局部变量。
这意味着如果你有current
,你可以这样做:
size
如果您不使用self.
。以上将产生错误,指出my_list = LinkedList()
my_list.size()
print(my_list.count)
不是属性。
self.
需要count
的原因是因为head
是您在self.
中写的实例属性。显然,当您计算链表的大小时,您想要使用当前实例的head
。这就是你将其称为__init__
的原因。只有head
才会引用一个未定义的局部变量。
关于在这种情况下使用self.head
是否合适的问题。我会说不,因为head
和self.
的性质似乎只是用于计算大小的辅助变量,并且将它们作为{{1的属性 - 没有意义}。class。
答案 1 :(得分:0)
简单地说,必须使用self
来引用head
变量的原因是因为head
是实例属性。换句话说,为head
的每个实例创建LinkedList
属性,并且要访问内部head
属性,必须使用self
。
是的,不必要地使用self
是不好的做法。 self
仅应用于引用或创建实例属性。只需创建普通局部变量就足够的实例属性是不必要的,如果多次调用size
,可能效率低下。
答案 2 :(得分:0)
使用自身对象,您将这些变量与类对象相关联,并且可以在整个类中访问它。
如果省略self,那么这些变量的范围仅在size函数内。