一个牛角尖问题吗,求大牛解答,祝大神中秋快乐

jin25973970 2019-09-13 01:01:03
不多说上代码
===================第一个代码============
class Book:
def __init__(self, name, author, comment, state = 0):
self.name = name
self.author = author
self.comment = comment
self.state = state

# 创建一个Book类的子类 FictonBook

class FictonBook(Book):
def __init__(self, name, author, comment, state = 0, type = '虚构类'):
Book.__init__(self, name, author, comment, state = 0)-------------------这行不明白这里为什么有self
self.type = type
=========第二个代码=====================
class BookManager

def menu(self):
print('欢迎使用流浪图书管理系统\n')
while True:
print('1.查询所有书籍\n2.添加书籍\n3.借阅书籍\n4.归还书籍\n5.退出系统\n')
choice = int(input('请输入数字选择对应的功能:'))
if choice == 1:
self.show_all_book()-----------------------------------这行不明白 这里为什么没有self

def show_all_book(self):
print('书籍信息如下:')
for book in self.books:
print(book)
print('')
======================================
问题就是蓝色文字,第一个代码 和 第二个代码的区别就是 第一个是跨类调用函数 第二个是自调用函数 这是我能想到的区别了,但仍旧没搞明白self有时写 有时又不写 求大神解答呀 :)




...全文
122 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jin25973970 2019-09-14
  • 打赏
  • 举报
回复
想了好些时间 也查了好些博文,终于找到了答案,感谢博主 深度学习1 让在下茅塞顿开。各位写语法原来都是背的吗??呵呵,知其所以然不是更好吗?原来不是每个博主都是大神。。。
问题1答案
子类重写了父类方法,意味着切断了子类和父类在这个方法上的绑定关系,即不将自动传参self到父类同名函数,所以仍想调用父类同名方法,必须手动提供self参数 用父类名.方法(self)
这叫调用父类未绑定的方法的方法,真拗口,这叫调用父类未绑定的函数的方法,当然咯 还可以用super函数 还没研究
问题2 答案
解决了问题1 自然问题也解了 ,子类调用函数,注意是调用,不是定义 在类中定义函数时,必须写self,调用时 由于是子类调用 是绑定关系,所以Python自动将实例自动传参,所以不用写self
结贴
流泪熊猫头 2019-09-13
  • 打赏
  • 举报
回复
在类中定义方法时,第一个参数self代表该类的一个实例,调用时不用指定self参数。第一处是定义,所以需要置顶,第二处是调用就不用加了。
jin25973970 2019-09-13
  • 打赏
  • 举报
回复
恭请大神指教
恭请大神指教
恭请大神指教

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧