鱼C论坛

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

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

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

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

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

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

b = B()

class A:
    def __init__(self):
        str1 = "fishc"
        self.str1 = b.C()

        b.self.str1.value = str1

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的对象啊。。。
将代码改成:
b.(self.str1).value = str1
报错Invalid Syntax

改成:
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
class B:
    class C:
        value = 0

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

class A:
    def __init__(self):
        str1 = "fishc"
        self.str1 = b.C()

        c.value = str1
    def getValue(self):
        return c.value
    
    def setValue(self, value1):
        c.value = value1

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

使用道具 举报

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

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

class A:
    def __init__(self):
        str1 = "fishc"
        self.str1 = b.C()

        c.value = str1

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
没听懂
但帮你改了一哈,至少不会报错了
你看看满不满足:
class B:
    class C:
        value = 0

b = B()


class A:
    def __init__(self):
        str1 = "fishc"
        self.str1 = b.C()

        self.str1.value = str1

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值。。
class B:
    class C:
        value = 0

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

class A:
    def __init__(self):
        str1 = "fishc"
        self.str1 = b.C()

        c.value = str1

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

使用道具 举报

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

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

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

class A:
    def __init__(self):
        str1 = "fishc"
        self.str1 = b.C()

        c.value = str1
    def getValue(self):
        return c.value
    
    def setValue(self, value1):
        c.value = value1

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

使用道具 举报

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

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

Jack = Students()

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

#以下是我希望实现的效果
>>> Jack.期末考.chinese_score
>>> 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-6-8 17:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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