【发布时间】:2023-03-08 21:53:01
【问题描述】:
我希望能够更改类中的变量(在本例中为 greet),每次我们对类进行变量更改时。
剪掉的是这个:
class Greet(object):
def __init__(self, name="", age="", job=""):
self.name = name
self.age = age
self.job = job
self.greet = "Hello"
if self.name:
self.greet = self.greet + " " + self.name
if self.age:
self.greet = self.greet + ". Good to know that you is " + self.age + " years old"
if self.job:
self.greet = self.greet + ". I think being a " + self.job + " is amazing."
def shout(self):
print self.greet
return True
g1 = Greet(name="John Doe", job="Programmer")
g2 = Greet(name="Janis Duh", age="34", job="Singer")
g2.name = "Janis Joplin"
g3 = Greet()
g3.name = "Smith"
g3.age = "22"
g3.job = "Designer"
print ("Name %s\nAge %s\nJob %s\nGreet %s\n" % ( g1.name, g1.age, g1.job, g1.greet))
g1.shout
print ("Name %s\nAge %s\nJob %s\nGreet %s\n" % ( g2.name, g2.age, g2.job, g2.greet))
g2.shout
print ("Name %s\nAge %s\nJob %s\nGreet %s\n" % ( g3.name, g3.age, g3.job, g3.greet))
g3.shout
输出是:
名字 John Doe
年龄
工作 程序员
问候你好约翰·多伊。我认为 成为一名程序员真是太棒了。姓名贾尼斯·乔普林
34 岁
职业歌手
问候你好贾尼斯杜。很高兴知道您今年 34 岁。我认为成为一名歌手真是太棒了。史密斯的名字
22 岁 工作设计师
问候你好
在任何情况下,喊方法都不能正确打印“问候”。即使在 self.greet 设置正确的情况下。
g1 对象打印正常,因为我在创建实例时声明了变量。
g2 正确更改变量名,但问候语仍然指向旧值,似乎没有更新。
g3 更糟糕的是,可能出于同样的原因 g2 没有在问候时正确更新名称。
欢迎指路
(后期编辑)
按照亚当·斯密,暗示我宁愿尝试将“问候”作为实例属性,如下所示:
def greet(self):
self.greeting = "Hello!"
if self.name:
self.greeting += " {0.name}."
if self.age:
self.greeting += " Good to know you are {0.age} years old."
if self.job:
self.greeting += " I think being a {0.job} is amazing."
print(self.greeting.format(self))
...
g = Greeter(...)
g.greet()
有效,但是
print g.greeting
给我一些类似的东西:
Hello! {0.name}. Good ...
【问题讨论】:
-
我看不到任何
class attributes。仅限instance attributes -
是的。我没有使用类属性,因为我希望每个实例都有自己的值。
-
好的,那么我一定误解了这个问题,因为你问题的第一行说:我希望能够更改
class中的变量 -
抱歉我的定义不好,谢谢。