我应该将用户输入的所有成员变量作为属性吗?

时间:2017-07-22 02:34:51

标签: python class attributes

假设我有一个班级:

class MyClass:

    def __init__(self, name, age):
        self.name = name
        self.age = age

名称和年龄应该是我在班级用户可以访问的文档中传达的属性吗?原因是有时实例是自动生成的,并且类的用户可能想要查看设置的名称。

1 个答案:

答案 0 :(得分:0)

class的文档中,您应该始终列出并解释传入的参数。在像这样的对象中,传入nameage是对于形成对象至关重要,因此必须将其记录下来。

然而,将它们存储为对象属性的以下行为稍微是关于要记录什么的灰色区域。如果我这样做一个对象:

person = MyClass("Miguelito", 75)

您知道您的代码可以获得姓名和年龄:

print(person.name) #Prints "Miguelito"
print(person.age) #Prints 75

但是,您可以在世界上命名agename个变量。如果您希望用户以后能够获得姓名或年龄,您应该记录它。我个人更喜欢这两种方式:

1)制作一个getter方法并记录下来。我喜欢这个,因为它没有告诉用户存储变量的位置,只是给了他们一个获取它的值的方法。即使确定的用户仍然可以找出它存储的位置并对其进行更改,但它会降低用户在不应该更改年龄或姓名的可能性。

2)记录变量的存在。如果您希望用户具有完全控制权,并且能够重置该值,或者您正在尝试简化类中的定义数量,那么这很好。

奖励:您还可以创建一个def __str__(self):,返回一个类似

的字符串
def __str__(self):
    return self.name + " is " + str(self.age) + " years old."

这样一个人只需要print你的对象,他们就可以看到所有的信息,并记录下来。这样,用户不必关心访问对象的属性或方法。