鱼C论坛

 找回密码
 立即注册
查看: 169|回复: 13

[已解决]面向对象有关的基础问题

[复制链接]
发表于 2024-4-7 10:21:49 | 显示全部楼层 |阅读模式

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

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

x
如题:智能手机的默认语言为中文。编写手机类,并使用构造方法。在调用时,采用无参构造方法时,表示使用默认语言设计,利用有参构造方法时,修改手机的默认语言为英文。

我所理解的题目是:如果默认,则语言为中文;如需更改,则语言为用户所输入的


我奇怪的代码:

def phone():
    def __init__(self, language):
        self.language = language

if input("默认语言输入1\n更改语言输入2\n") == '1':
    default = phone('Chinese')
    print(default.language)
else:
    default = phone(input("请输入你要更改的语言"))
    print(default.language)

我的代码是有问题的QAQ

这边放上参考答案:

class Mobile:
    def __init__(self,language = "英文"):
        if language == "英文":
           print("智能手机的默认语言为" + language)
        else:
           print("将智能手机的默认语言设置为" + language)
phone1 = Mobile()
phone2 = Mobile("中文")

不太理解参考答案里Mobile 里的判断是怎么个操作
最佳答案
2024-4-7 10:22:00
参考答案中的判断是在构造方法`__init__`中进行的。构造方法是在创建对象时自动调用的方法,用来初始化对象的属性。

在参考答案中,构造方法`__init__`的参数中有一个默认参数`language = "英文"`,这表示如果在创建对象时没有传入语言参数,那么默认语言就是英文。

在构造方法内部,使用了条件判断语句`if`,如果传入的参数`language`等于"英文",就打印出"智能手机的默认语言为英文",否则打印出"将智能手机的默认语言设置为"加上用户输入的语言。

这样,当创建一个没有传入语言参数的手机对象`phone1 = Mobile()`时,会输出"智能手机的默认语言为英文";而创建一个传入中文语言参数的手机对象`phone2 = Mobile("中文")`时,会输出"将智能手机的默认语言设置为中文"。

希望能够帮到你理解构造方法和条件判断的使用。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-4-7 10:22:00 | 显示全部楼层    本楼为最佳答案   
参考答案中的判断是在构造方法`__init__`中进行的。构造方法是在创建对象时自动调用的方法,用来初始化对象的属性。

在参考答案中,构造方法`__init__`的参数中有一个默认参数`language = "英文"`,这表示如果在创建对象时没有传入语言参数,那么默认语言就是英文。

在构造方法内部,使用了条件判断语句`if`,如果传入的参数`language`等于"英文",就打印出"智能手机的默认语言为英文",否则打印出"将智能手机的默认语言设置为"加上用户输入的语言。

这样,当创建一个没有传入语言参数的手机对象`phone1 = Mobile()`时,会输出"智能手机的默认语言为英文";而创建一个传入中文语言参数的手机对象`phone2 = Mobile("中文")`时,会输出"将智能手机的默认语言设置为中文"。

希望能够帮到你理解构造方法和条件判断的使用。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-7 10:28:02 | 显示全部楼层
FishC 发表于 2024-4-7 10:22
参考答案中的判断是在构造方法`__init__`中进行的。构造方法是在创建对象时自动调用的方法,用来初始化对象 ...

参考答案中的class Mobile 和下面的 phone1 =Mobile()   phone2 = Mobile(‘中文’)是有什么联系
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-7 10:28:18 | 显示全部楼层
纪叶 发表于 2024-04-07 10:28
参考答案中的class Mobile 和下面的 phone1 =Mobile( ...


在参考答案中,`class Mobile`是定义了一个手机类,包含了构造方法`__init__`。通过创建手机对象来实例化这个类。

`phone1 = Mobile()`和`phone2 = Mobile('中文')`是创建了两个手机对象,分别赋值给变量`phone1`和`phone2`。这里使用了类名后面加括号的形式来调用构造方法,实际上是在创建对象。由于构造方法中有一个默认参数`language = "英文"`,所以调用`Mobile()`时没有传入语言参数,即使用默认语言,默认为英文。而调用`Mobile('中文')`时传入了'中文'作为语言参数,所以该手机对象的默认语言被设置为中文。

可以将`class Mobile`理解为一个模板或者蓝图,`phone1`和`phone2`是使用这个模板创建的具体对象。每个对象都有自己独立的属性和方法。

所以,`class Mobile`定义了一个手机类,然后通过创建手机对象来实例化这个类,即根据类的模板创建具体的手机对象。`phone1`和`phone2`是两个不同的手机对象,它们可以具有不同的属性和行为。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-7 10:43:12 | 显示全部楼层
FishC 发表于 2024-4-7 10:28
在参考答案中,`class Mobile`是定义了一个手机类,包含了构造方法`__init__`。通过创建手机对象来实例 ...

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

使用道具 举报

发表于 2024-4-7 10:43:19 | 显示全部楼层


不客气,有问题随时来问哦!我会尽力帮助你的。祝你学习进步,编程愉快!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-7 10:54:11 | 显示全部楼层
FishC 发表于 2024-4-7 10:43
不客气,有问题随时来问哦!我会尽力帮助你的。祝你学习进步,编程愉快!

以上回复来自 FishC AI 小 ...

def phone():
    def __init__(self, language="中文"):
        if language == "中文":
            print("使用默认语言:", language)
        else:
            print("更改默认语言:", language)
mobile1 = phone()
mobile2 = phone("英文")

我这样子写哪里有bug吗  题目就是1楼那个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-7 10:54:23 | 显示全部楼层
纪叶 发表于 2024-04-07 10:54
def phone():
    def __init__(self, language="中 ...


你的代码中存在一些问题。首先,在面向对象编程中,我们应该创建一个类而不是函数。其次,在创建对象时需要使用类名来实例化对象,而不是直接调用类名作为函数。此外,构造方法是在实例化对象时自动调用的,因此不需要显式调用。

下面是根据你的题目要求进行修改后的代码:

  1. class Mobile:
  2.     def __init__(self, language="中文"):
  3.         if language == "中文":
  4.             print("使用默认语言:", language)
  5.         else:
  6.             print("更改默认语言:", language)

  7. mobile1 = Mobile()
  8. mobile2 = Mobile("英文")
复制代码


在这个代码中,我们创建了一个名为Mobile的类,并定义了构造方法`__init__`。构造方法中有一个默认参数`language`,如果没有传入参数,则会使用默认值"中文"。在构造方法内部,通过条件判断语句判断传入的语言是否为"中文",并输出相应的提示信息。

当我们创建一个没有传入参数的手机对象`mobile1 = Mobile()`时,会输出"使用默认语言:中文";而创建一个传入英文语言参数的手机对象`mobile2 = Mobile("英文")`时,会输出"更改默认语言:英文"。

希望能够帮到你解决问题,如果还有其他疑问,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-7 11:00:29 | 显示全部楼层
FishC 发表于 2024-4-7 10:54
你的代码中存在一些问题。首先,在面向对象编程中,我们应该创建一个类而不是函数。其次,在创建对象时 ...

那如果我要创建一个名为phone的类?

创建函数和创建类的写法格式哪里不同?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-7 11:01:18 | 显示全部楼层
纪叶 发表于 2024-04-07 11:00
那如果我要创建一个名为phone的类?

创建函数和创 ...


创建函数和创建类的写法格式有一些不同。下面是创建一个名为Phone的类的示例代码:

  1. class Phone:
  2.     def __init__(self, language="中文"):
  3.         self.language = language
  4.         
  5.     def change_language(self, new_language):
  6.         self.language = new_language
  7.         print("更改默认语言为:", self.language)

  8. # 创建对象
  9. mobile1 = Phone()
  10. print(mobile1.language)  # 输出:中文

  11. mobile2 = Phone("英文")
  12. print(mobile2.language)  # 输出:英文

  13. mobile2.change_language("法语")  # 调用方法更改语言
  14. print(mobile2.language)  # 输出:法语
复制代码


在这个例子中,我们定义了一个名为Phone的类。类也使用关键字`class`来定义。类中有一个构造方法`__init__`,用于初始化对象属性。在构造方法中,我们使用`self.language`来定义并初始化对象的语言属性。类中还定义了一个名为`change_language`的方法,用于修改对象的语言属性。

在创建对象时,需要使用类名来实例化对象,并且可以通过调用对象的属性和方法来操作对象。比如,通过`mobile1.language`获取对象的语言属性,通过`mobile2.change_language("法语")`调用对象的`change_language`方法来修改语言属性。

希望这样能够帮到你理解函数和类的写法格式的区别。如果还有其他疑问,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-7 11:11:53 | 显示全部楼层
FishC 发表于 2024-4-7 11:01
创建函数和创建类的写法格式有一些不同。下面是创建一个名为Phone的类的示例代码:

def change_language(self, new_language):
        self.language = new_language
        print("更改默认语言为:", self.language)

中的第二行:self.language = new_language 是什么意思?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-7 11:12:10 | 显示全部楼层
纪叶 发表于 2024-04-07 11:11
def change_language(self, new_language):
         ...


`self.language = new_language`这行代码是将参数`new_language`的值赋给对象的语言属性`self.language`。在面向对象编程中,我们通常使用`self`关键字来引用对象自身,以便在类的方法中访问和修改对象的属性。在这个例子中,`self.language`表示对象的语言属性,而`new_language`是方法`change_language`的参数,它接收一个新的语言值作为输入。通过将`new_language`的值赋给`self.language`,我们实现了将对象的语言属性更改为新语言的功能。

例如,如果我们调用`mobile2.change_language("法语")`,则`change_language`方法的参数`new_language`就是"法语"。然后,`self.language = new_language`将"法语"赋给了对象`mobile2`的语言属性`language`。通过这种方式,我们可以在类的方法中更新对象的属性。

希望这样能够解答你的疑问。如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-7 11:19:23 | 显示全部楼层
FishC 发表于 2024-4-7 11:12
`self.language = new_language`这行代码是将参数`new_language`的值赋给对象的语言属性`self.language ...

mobile2 = Phone("英文")
print(mobile2.language)  # 输出:英文

mobile2.change_language("法语")  # 调用方法更改语言
print(mobile2.language)  # 输出:法语

这两个都是在类的方法中更新对象属性吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-7 11:19:34 | 显示全部楼层
纪叶 发表于 2024-04-07 11:19
mobile2 = Phone("英文")
print(mobile2.language)   ...


是的,这两个操作都是在类的方法中更新对象属性。

在第一行代码中,我们创建了一个名为`mobile2`的手机对象,并将语言参数设置为"英文"。然后通过`print(mobile2.language)`来输出对象的语言属性。由于我们在构造方法中设置了默认的语言属性为"英文",所以输出结果为"英文"。

在第二行代码中,我们调用了对象`mobile2`的方法`change_language()`来更改语言属性。方法传入参数"法语",然后在方法内部使用`self.language = new_language`将新的语言值赋给对象的语言属性。这样,对象`mobile2`的语言属性被更新为"法语"。

在第三行代码中,再次使用`print(mobile2.language)`来输出对象的语言属性。由于我们已经在方法中更新了语言属性为"法语",所以输出结果为"法语"。

总结起来,通过在类的方法中使用`self.language`来更新对象的属性,我们可以方便地修改对象的语言属性值。这样的设计使得对象可以根据需要进行灵活的属性更改。希望这样能够解答你的问题,如果还有疑问,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-1 06:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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