定义类,在构造法中对类属性进行加一操作
题目:定义一个雁类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且输出.....)
你的代码有一些小问题。首先,你需要调用`geese.info()`而不是只写`geese.info`。其次,在构造方法中对实例编号的类属性进行加1操作,你可以将类属性放在类定义的外部,并通过`Geese.rating += 1`来对其进行加1操作。最后,你可以在`for`循环的开头加上一个输入提示,让用户输入雁的名称。
修改后的代码如下:
class Geese:
name = '大雁'
feature = '体型大,喙的基部较高'
feather = '多为褐色、灰色、白色'
rating = 0
def __init__(self, rating):
Geese.rating += 1
self.rating = rating
def info(self):
print('编号{}\n'.format(self.rating))
print('{}\n'.format(Geese.name))
print('{}\n'.format(Geese.feature))
print('{}\n'.format(Geese.feather))
for i in range(4):
geese_name = input("请输入雁的名称:")
geese = Geese(i)
geese.info()
希望这能解决你的问题!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-4-12 11:10
你的代码有一些小问题。首先,你需要调用`geese.info()`而不是只写`geese.info`。其次,在构造方法中对实例 ...
def __init__(self, rating) 是一个发挥什么作用的存在? 纪叶 发表于 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 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-4-12 11:13
在Python中,`__init__()`是一个特殊的方法,它是在类实例化时自动调用的构造方法。它的作用是对新创建 ...
`__init__()`方法是在对象实例化时自动调用的,是不是在我geese = Geese(0)时,对象geese就自动调用了Geese内的__init__构造法?
纪叶 发表于 2024-04-12 11:18
`__init__()`方法是在对象实例化时自动调用的,是不是 ...
是的,当你执行`geese = Geese(0)`时,`Geese`类会被实例化,并且自动调用`__init__()`方法来进行对象的初始化操作。传递的参数0会被传递给`rating`参数,在`__init__()`方法内部,它会将这个值赋给实例的`rating`属性。
所以,当你执行`geese = Geese(0)`后,对象 `geese` 就拥有了一个 `rating` 属性,并且值为0。这个过程完全是自动完成的,你无需手动调用 `__init__()` 方法。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-4-12 11:10
你的代码有一些小问题。首先,你需要调用`geese.info()`而不是只写`geese.info`。其次,在构造方法中对实例 ...
将类属性放在类定义的外部,后续调用中能更改该类属性吗
纪叶 发表于 2024-04-12 11:19
将类属性放在类定义的外部,后续调用中能更改该类属性 ...
如果将类属性放在类定义的外部,可以通过类名直接访问和修改该类属性。例如,我们将类属性`name`放在类定义的外部,然后在后续调用中进行修改:
class Geese:
rating = 0
def __init__(self, rating):
Geese.rating += 1
self.rating = rating
def info(self):
print('编号{}\n'.format(self.rating))
print('{}\n'.format(Geese.name))
# 将name类属性放在类定义的外部
Geese.name = '大雁'
for i in range(4):
geese_name = input("请输入雁的名称:")
# 修改name类属性
Geese.name = geese_name
geese = Geese(i)
geese.info()
这样,每次创建实例之前,都可以通过修改`Geese.name`来改变所有实例的类属性`name`的值。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]