鱼C论坛

 找回密码
 立即注册
查看: 1270|回复: 9

[已解决]一个尴尬且难以描述的问题

[复制链接]
发表于 2020-2-22 21:02:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
非常感谢论坛里各位dalao的对我之前问题的解答,但我实在太弱鸡了,请恕我天天来问问题。。。
代码如下:

  1. class B:
  2.     class C:
  3.         value = 0

  4. b = B()

  5. class A:
  6.     def __init__(self):
  7.         str1 = "fishc"
  8.         self.str1 = b.C()

  9.         b.self.str1.value = str1

  10. a = A()
复制代码

如代码,我在B类中创建了一个C类,这个C类有一个名为value的属性。
我在A类的__init__方法中定义了一个字符串,并将这个字符串实例化为b对象内部的C类的对象(绕口令一般的表达。。)
上面这步的操作没有报错,而当我想把刚刚实例化的这个“fishc”对象的value属性赋值时,就会报错

报错内容:
发生异常: AttributeError
'B' object has no attribute 'self'

这里很明显是在说我的“b.self.str1.value = str1”这句中,b对象没有self属性,但是这个self是str1的对象啊。。。
将代码改成:
  1. b.(self.str1).value = str1
复制代码

报错Invalid Syntax

改成:
  1. b.str1.value = str1
复制代码

报错'B' object has no attribute 'str1'

求助。。。
最佳答案
2020-2-22 21:31:08
Kituro_ 发表于 2020-2-22 21:19
改成这样。。
报错是不会报错了,可问题是怎么访问“fishc”这个对象的value值。。

秉承精益求精的精神,我又给你改了一哈:
这次可以直接通过函数访问和修改value
  1. class B:
  2.     class C:
  3.         value = 0

  4. b = B()
  5. c = b.C()

  6. class A:
  7.     def __init__(self):
  8.         str1 = "fishc"
  9.         self.str1 = b.C()

  10.         c.value = str1
  11.     def getValue(self):
  12.         return c.value
  13.    
  14.     def setValue(self, value1):
  15.         c.value = value1

  16. a = A()
  17. a.setValue("qiuyouzhi")
  18. print(a.getValue())
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-22 21:12:56 | 显示全部楼层
没听懂
但帮你改了一哈,至少不会报错了
你看看满不满足:
  1. class B:
  2.     class C:
  3.         value = 0

  4. b = B()
  5. c = b.C()

  6. class A:
  7.     def __init__(self):
  8.         str1 = "fishc"
  9.         self.str1 = b.C()

  10.         c.value = str1

  11. a = A()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-22 21:15:52 | 显示全部楼层
qiuyouzhi 发表于 2020-2-22 21:12
没听懂
但帮你改了一哈,至少不会报错了
你看看满不满足:

emm。。能不能把 c 这个对象的名称换成str1...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-22 21:19:30 | 显示全部楼层
qiuyouzhi 发表于 2020-2-22 21:12
没听懂
但帮你改了一哈,至少不会报错了
你看看满不满足:
  1. class B:
  2.     class C:
  3.         value = 0

  4. b = B()


  5. class A:
  6.     def __init__(self):
  7.         str1 = "fishc"
  8.         self.str1 = b.C()

  9.         self.str1.value = str1

  10. a = A()
复制代码

改成这样。。
报错是不会报错了,可问题是怎么访问“fishc”这个对象的value值。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-22 21:20:13 | 显示全部楼层
本帖最后由 qiuyouzhi 于 2020-2-22 21:25 编辑

发错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-22 21:23:24 | 显示全部楼层
Kituro_ 发表于 2020-2-22 21:19
改成这样。。
报错是不会报错了,可问题是怎么访问“fishc”这个对象的value值。。
  1. class B:
  2.     class C:
  3.         value = 0

  4. b = B()
  5. c = b.C()

  6. class A:
  7.     def __init__(self):
  8.         str1 = "fishc"
  9.         self.str1 = b.C()

  10.         c.value = str1

  11. a = A()
复制代码

这样就没问题了
然后想访问,你就这样写:
  1. c.value
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-22 21:31:08 | 显示全部楼层    本楼为最佳答案   
Kituro_ 发表于 2020-2-22 21:19
改成这样。。
报错是不会报错了,可问题是怎么访问“fishc”这个对象的value值。。

秉承精益求精的精神,我又给你改了一哈:
这次可以直接通过函数访问和修改value
  1. class B:
  2.     class C:
  3.         value = 0

  4. b = B()
  5. c = b.C()

  6. class A:
  7.     def __init__(self):
  8.         str1 = "fishc"
  9.         self.str1 = b.C()

  10.         c.value = str1
  11.     def getValue(self):
  12.         return c.value
  13.    
  14.     def setValue(self, value1):
  15.         c.value = value1

  16. a = A()
  17. a.setValue("qiuyouzhi")
  18. print(a.getValue())
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-22 21:58:14 | 显示全部楼层
qiuyouzhi 发表于 2020-2-22 21:31
秉承精益求精的精神,我又给你改了一哈:
这次可以直接通过函数访问和修改value

哇,谢谢dalao!!感谢指正!!已经将你的答案设为最佳
我觉得这里说一下我为啥要提这个问题比较好。
我在写一个学生成绩管理系统。我将学生(students)封装为一个类,这个students的类里还包含有一个储存学生成绩的exam类。当然,程序需要储存多次考试学生的成绩,所以只要在每次导入成绩时,都将每个人的每次考试的成绩实例化为exam类的一个对象。需要访问学生的每一次考试的成绩时,只需要调用exam类的不同对象就可以了
  1. class Students:
  2.     #info......
  3.     class Exam(self):
  4.         chinese_score = ....
  5.         math_score = ....
  6.         #保存每一次考试的成绩

  7. Jack = Students()

  8. class Classes:
  9.     #.....
  10.     def import_score(self):
  11.         #导入考试数据。。。
  12.         exam_name = "期末考"
  13.         #考试名称为期末考
  14.         exam_name = Jack.Exam()
  15.         Jack.exam_name.chinese_score = 125
  16.         #将Jack的成绩进行存储

  17. #以下是我希望实现的效果
  18. >>> Jack.期末考.chinese_score
  19. >>> 125
复制代码

dalao有没有好一点的办法来实现这种效果。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-23 08:32:19 | 显示全部楼层
Kituro_ 发表于 2020-2-22 21:58
哇,谢谢dalao!!感谢指正!!已经将你的答案设为最佳
我觉得这里说一下我为啥要提这个问题比较好。
...

字典
你可以在一个类里创造一个字典(分数),然后封装几个方法,比如输入数据,修改数据等等(字典内置方法)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-23 09:32:58 | 显示全部楼层
qiuyouzhi 发表于 2020-2-23 08:32
字典
你可以在一个类里创造一个字典(分数),然后封装几个方法,比如输入数据,修改数据等等(字典内置方 ...

谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-14 13:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表