鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: 15779327169

[已解决][课后作业] 第048讲:魔法方法:迭代器 | 课后测试题 动动手第1题求教

[复制链接]
 楼主| 发表于 2024-4-18 16:46:43 | 显示全部楼层
FishC 发表于 2024-4-18 13:16
这种方法可以实现对实例对象的重复调用的原理是,在每次迭代开始前,通过 `__iter__` 方法将迭代器的状 ...

请问:
class Person:
    def __init__(self):
        self.name = 'Tom'
        self.age = 20

    def get_attr(self):
        print('我的名字叫:%s,今年%s岁'%(self.name,self.age))
tom = Person()
tom.get_attr()
print('-'*60)
class Zerson:
    def __init__(self,name='Tom',age=20):
        self.name = name
        self.age = age

    def get_attr(self):
        print('我的名字叫:%s,今年%s岁'%(self.name,self.age))
zom = Zerson()
zom.get_attr()
这两种写法有什么区别或者不同吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-18 16:47:00 | 显示全部楼层
15779327169 发表于 2024-04-18 16:46
请问:
class Person:
    def __init__(self):
   ...


这两种写法在功能上是相同的,都定义了一个类 `Person` 和 `Zerson`,并在初始化方法 `__init__` 中设置了属性 `name` 和 `age`,以及定义了一个方法 `get_attr` 来输出对象的属性。所以从功能角度来看,它们是一样的。

不同之处在于初始化方法 `__init__` 的参数设置上。在第一种写法中,初始化方法没有任何参数,属性的默认值是固定的,即 `self.name = 'Tom'` 和 `self.age = 20`。而在第二种写法中,初始化方法有两个可选参数 `name='Tom'` 和 `age=20`,属性的默认值可以通过传入参数进行自定义。

因此,使用第一种写法时,创建对象实例后的属性值是固定的;而使用第二种写法时,可以根据需要在创建对象实例时传入不同的参数来自定义属性值。例如:
zom = Zerson('Jerry', 25)
zom.get_attr()  # 输出结果为:我的名字叫:Jerry,今年25岁

总结来说,第一种写法适用于属性值不需要变动的情况,第二种写法适用于属性值需要可变的情况。

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

使用道具 举报

 楼主| 发表于 2024-4-18 17:26:25 | 显示全部楼层
FishC 发表于 2024-4-18 16:47
这两种写法在功能上是相同的,都定义了一个类 `Person` 和 `Zerson`,并在初始化方法 `__init__` 中设 ...

明白了,我还有一个问题。

class Person:
    def __init__(self,name='Tom',age=20):
        self.name = name
        self.age = age

    def get_attr(self):
        print('我的名字叫:%s,今年%s岁'%(self.name,self.age))
person = Person()
person.get_attr()
class zerson:
    def __init__(self,name='Tom',age=20):
        return self

    def get_attr(self,name='Tom',age=20):
        self.name = name
        self.age = age
        print('我的名字叫:%s,今年%s岁'%(self.name,self.age))
zom = Person()
zom.get_attr()
请问在__init__里传入形参和在get_attr里传入形参有什么不同吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-18 17:26:44 | 显示全部楼层
15779327169 发表于 2024-04-18 17:26
明白了,我还有一个问题。

class Person:
    def ...


在 `__init__` 方法中传入形参和在 `get_attr` 方法中传入形参的主要区别在于它们的作用和使用方式。

- `__init__` 方法:这是一个特殊的方法,用于初始化对象的属性。通过在 `__init__` 方法中传入形参,可以在创建对象实例时给属性赋予初始值。这里的形参可以设置默认值,也可以根据需要在创建对象实例时传入不同的参数来自定义属性值。在创建对象实例时会自动调用 `__init__` 方法来初始化属性。

- `get_attr` 方法:这个方法用于获取对象的属性值并进行输出等操作。通过在 `get_attr` 方法中传入形参,可以在调用方法时传入参数,用于临时修改或定制输出结果。这里的形参将会覆盖对象的实例属性,但只在方法内部生效,不会修改对象的实例属性。


举个例子来说明:
person = Person('Jerry', 25)
person.get_attr()  # 输出结果为:我的名字叫:Jerry,今年25岁

zom = zerson()
zom.get_attr('Jerry', 25)  # 输出结果为:我的名字叫:Jerry,今年25岁

在上面的例子中,`__init__` 方法中的形参用于在创建对象实例时自定义属性值,而 `get_attr` 方法中的形参用于临时修改输出结果。
总结来说,`__init__` 方法的形参用于初始化对象的属性,而 `get_attr` 方法的形参用于临时修改输出结果。

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-22 14:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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