在python wiki中,属性被描述为方法中定义的变量,在这个链接中:http://pythoncentral.io/introduction-to-python-classes/他们将下面代码中的val描述为成员变量。
class Foo:
def __init__(self, val):
self.val = val
def printVal(self):
print(self.val)
我只是想知道这是否也意味着val是一个实例属性(或者可能是一个类属性,因为它是在 init 部分中定义的?对不起,如果这是一个重复的问题,但我无法和找不到任何确认的内容。
答案 0 :(得分:1)
实例/成员变量是与类的特定实例关联的值。对于每个类,这些可以是不同的,并且可以通过类方法访问。类变量在类的每个实例中最初都是相同的。例如,采用以下类文件:
class MyClass(object):
class_variable = "!"
def __init__(self, first_word, second_word):
self.__instance_variable_one = first_word
self.__instance_variable_two = second_word
def to_string(self):
return self.__instance_variable_one + " " + self.__instance_variable_two
请注意,这里的实例变量以__为前缀,表示这些变量应该是私有的。现在使用这个类:
object_instance_one = MyClass("Hello", "World")
object_instance_one.to_string()
Hello World
print object_instance_one.class_variable
<!/ P>
请注意,这可以直接作为类变量访问,而不是通过方法。
print object_instance_one.to_string() + object_instance_one.class_variable
Hello World!
如果您愿意,可以覆盖类变量:
object_instance_one.class_variable = "!!!"
print object_instance_one.to_string() + object_instance_one.class_variable
Hello World !!!
现在因为实例变量使用__声明为private,所以通常不会直接修改它们,而是使用属性来提供允许您修改这些变量的方法。这些正确的方法允许您添加setter和getter方法(例如验证或类型检查)。一个例子:
class MyClass(object):
class_variable = "!"
def __init__(self, first_word=None, second_word=None):
self.__instance_variable_one = first_word
self.__instance_variable_two = second_word
@property
def instance_variable_one(self):
return self.__instance_variable_one
@instance_variable_one.setter
def instance_variable_one(self, value):
if isinstance(value, str):
self.__instance_variable_one = value
else:
raise TypeError("instance variable one must be of type str")
@property
def instance_variable_two(self):
return self.__instance_variable_two
@instance_variable_two.setter
def instance_variable_two(self, value):
if isinstance(value, str):
self.__instance_variable_two = value
else:
raise TypeError("instance variable two must be of type str")
def to_string(self):
return str(self.__instance_variable_one) + " " + str(self.__instance_variable_two)
用法:
object_instance_one = MyClass()
object_instance_one.instance_variable_one = "Hello"
object_instance_one.instance_variable_two = "World"
print object_instance_one.to_string() + object_instance_one.class_variable
Hello World!
object_instance_one.instance_variable_two = 2
文件&#34; C:/MyClass.py",第38行,在中 object_instance_one.instance_variable_two = 2文件&#34; C:/MyClass.py", 第28行,&gt; &gt; instance_variable_two引发TypeError(&#34;实例变量 两个必须是str&#34;类型错误:实例变量2必须是 输入str