鱼C论坛

 找回密码
 立即注册
查看: 110|回复: 7

[已解决]定义类,在构造法中对类属性进行加一操作

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

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

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

x
题目:定义一个雁类Geese,并在该类中定义4个类属性,前三个用于记录雁类的特征,第4个用于记录实例编号,然后定义一个构造方法,在该构造方法中将记录实例编号的类属性进行加1操作,并输出4个类属性的值,最后通过for循环创建4个雁类的实例。


我的代码:

class Geese:
    def __init__(self, rating):
        self.name = '大雁'
        self.feature = '体型大,喙的基部较高'
        self.feather = '多为褐色、灰色、白色'
        self.rating = rating

    def info(self):
        print('编号{}\n'.format(self.rating))
        print('{}\n'.format(self.name))
        print('{}\n'.format(self.feature))
        print('{}\n'.format(self.feather))


for i in range(4):
    geese = input("the name of the bird:\n")
    geese = Geese(i)
    geese.info

运行只有输入嗷(求助大佬why没有进入Geese且输出.....)
最佳答案
2024-4-12 11:10:37
你的代码有一些小问题。首先,你需要调用`geese.info()`而不是只写`geese.info`。其次,在构造方法中对实例编号的类属性进行加1操作,你可以将类属性放在类定义的外部,并通过`Geese.rating += 1`来对其进行加1操作。最后,你可以在`for`循环的开头加上一个输入提示,让用户输入雁的名称。

修改后的代码如下:

  1. class Geese:
  2.     name = '大雁'
  3.     feature = '体型大,喙的基部较高'
  4.     feather = '多为褐色、灰色、白色'
  5.     rating = 0

  6.     def __init__(self, rating):
  7.         Geese.rating += 1
  8.         self.rating = rating

  9.     def info(self):
  10.         print('编号{}\n'.format(self.rating))
  11.         print('{}\n'.format(Geese.name))
  12.         print('{}\n'.format(Geese.feature))
  13.         print('{}\n'.format(Geese.feather))


  14. for i in range(4):
  15.     geese_name = input("请输入雁的名称:")
  16.     geese = Geese(i)
  17.     geese.info()
复制代码


希望这能解决你的问题!

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

使用道具 举报

发表于 2024-4-12 11:10:37 | 显示全部楼层    本楼为最佳答案   
你的代码有一些小问题。首先,你需要调用`geese.info()`而不是只写`geese.info`。其次,在构造方法中对实例编号的类属性进行加1操作,你可以将类属性放在类定义的外部,并通过`Geese.rating += 1`来对其进行加1操作。最后,你可以在`for`循环的开头加上一个输入提示,让用户输入雁的名称。

修改后的代码如下:

  1. class Geese:
  2.     name = '大雁'
  3.     feature = '体型大,喙的基部较高'
  4.     feather = '多为褐色、灰色、白色'
  5.     rating = 0

  6.     def __init__(self, rating):
  7.         Geese.rating += 1
  8.         self.rating = rating

  9.     def info(self):
  10.         print('编号{}\n'.format(self.rating))
  11.         print('{}\n'.format(Geese.name))
  12.         print('{}\n'.format(Geese.feature))
  13.         print('{}\n'.format(Geese.feather))


  14. for i in range(4):
  15.     geese_name = input("请输入雁的名称:")
  16.     geese = Geese(i)
  17.     geese.info()
复制代码


希望这能解决你的问题!

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

使用道具 举报

 楼主| 发表于 2024-4-12 11:13:25 | 显示全部楼层
FishC 发表于 2024-4-12 11:10
你的代码有一些小问题。首先,你需要调用`geese.info()`而不是只写`geese.info`。其次,在构造方法中对实例 ...

def __init__(self, rating) 是一个发挥什么作用的存在?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-12 11:13:39 | 显示全部楼层
纪叶 发表于 2024-04-12 11:13
def __init__(self, rating) 是一个发挥什么作用的存 ...


在Python中,`__init__()`是一个特殊的方法,它是在类实例化时自动调用的构造方法。它的作用是对新创建的对象进行初始化操作。

在上面的代码中,`__init__()`方法接受一个参数`rating`,该参数用于设置实例的编号。在方法体内,我们通过`self.rating = rating`将传入的参数赋值给实例的`rating`属性。

当我们创建一个雁类的实例时,比如`geese = Geese(0)`,实例化过程会自动调用`__init__()`方法,并将参数0传递给`rating`参数。这样就能够为每个实例设置不同的编号。

需要注意的是,`__init__()`方法是在对象实例化时自动调用的,而不需要我们手动调用。

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

使用道具 举报

 楼主| 发表于 2024-4-12 11:18:46 | 显示全部楼层
FishC 发表于 2024-4-12 11:13
在Python中,`__init__()`是一个特殊的方法,它是在类实例化时自动调用的构造方法。它的作用是对新创建 ...

`__init__()`方法是在对象实例化时自动调用的,是不是在我geese = Geese(0)时,对象geese就自动调用了Geese内的__init__构造法?

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

使用道具 举报

发表于 2024-4-12 11:18:55 | 显示全部楼层
纪叶 发表于 2024-04-12 11:18
`__init__()`方法是在对象实例化时自动调用的,是不是 ...


是的,当你执行`geese = Geese(0)`时,`Geese`类会被实例化,并且自动调用`__init__()`方法来进行对象的初始化操作。传递的参数0会被传递给`rating`参数,在`__init__()`方法内部,它会将这个值赋给实例的`rating`属性。

所以,当你执行`geese = Geese(0)`后,对象 `geese` 就拥有了一个 `rating` 属性,并且值为0。这个过程完全是自动完成的,你无需手动调用 `__init__()` 方法。

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

使用道具 举报

 楼主| 发表于 2024-4-12 11:19:32 | 显示全部楼层
FishC 发表于 2024-4-12 11:10
你的代码有一些小问题。首先,你需要调用`geese.info()`而不是只写`geese.info`。其次,在构造方法中对实例 ...

将类属性放在类定义的外部,后续调用中能更改该类属性吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-12 11:19:46 | 显示全部楼层
纪叶 发表于 2024-04-12 11:19
将类属性放在类定义的外部,后续调用中能更改该类属性 ...


如果将类属性放在类定义的外部,可以通过类名直接访问和修改该类属性。例如,我们将类属性`name`放在类定义的外部,然后在后续调用中进行修改:

  1. class Geese:
  2.     rating = 0

  3.     def __init__(self, rating):
  4.         Geese.rating += 1
  5.         self.rating = rating

  6.     def info(self):
  7.         print('编号{}\n'.format(self.rating))
  8.         print('{}\n'.format(Geese.name))


  9. # 将name类属性放在类定义的外部
  10. Geese.name = '大雁'

  11. for i in range(4):
  12.     geese_name = input("请输入雁的名称:")
  13.     # 修改name类属性
  14.     Geese.name = geese_name
  15.     geese = Geese(i)
  16.     geese.info()
复制代码


这样,每次创建实例之前,都可以通过修改`Geese.name`来改变所有实例的类属性`name`的值。

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-1 08:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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