Discuss / Python / Python允许对实例变量绑定任何数据,也就是说,对于两个实例变量,虽然它们都是同一个类的不同实例,但拥有的变量名称都可能不同

Python允许对实例变量绑定任何数据,也就是说,对于两个实例变量,虽然它们都是同一个类的不同实例,但拥有的变量名称都可能不同

Topic source

狗不理翔

#1 Created at ... [Delete] [Delete and Lock User]

这句还是没懂,有大神帮忙具体解释下吗?包括下面那个代码也没有懂。

慈勇先生

#2 Created at ... [Delete] [Delete and Lock User]
>>> bart = Student('Bart Simpson', 59)
>>> lisa = Student('Lisa Simpson', 87)
>>> bart.age = 8
>>> bart.age
8
>>> lisa.age
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Student' object has no attribute 'age'

在这里例子里面,定义了两个实例bart和lisa。 bart.age=8,让bart有了age的属性 但是,lisa并没有age这个属性。

这就是,bart和lisa两个实例变量,都是同一个类的实例,但是bart有的变量名包括姓名和成绩、年龄,lisa只有姓名和成绩。

廖雪峰

#3 Created at ... [Delete] [Delete and Lock User]

楼上理解是对的,bart和lisa都是Student类型,但是bart有3个属性,lisa只有两个

猪力芽

#4 Created at ... [Delete] [Delete and Lock User]

请问如果需要把bart的三个属性都打印出来的话,应该怎样做才对呢?

我觉得应该在对象上面绑定一个新的函数,但是我试过了,后绑定的函数,是不会自动加上self这个参数的,可能还有别的方法吧

NoArya

#6 Created at ... [Delete] [Delete and Lock User]

懂啦懂啦

不知道是不是我理解上的问题,之前看C#里面说的实例变量是一个类的字段而已,类的实例是实例,貌似不等于实例变量。 是我理解上的问题还是说Python和C#上的差异

python是动态语言,实例创建出来之后仍然可以被绑定其他属性,即使类中没有规定。 Java/C#是静态语言,实例创建出来后属性就固定了,有什么属性是类规定好了的,不允许改变。

孟庆伟v

#9 Created at ... [Delete] [Delete and Lock User]

这坑爹的,age和87是两个不同的属性啊,87是得分,lisa的age没赋值,还没初始化这个属性。搞了半天,87不是age,坑爹。

Junhong1994

#10 Created at ... [Delete] [Delete and Lock User]

我以为59和87是年龄。 我说不对呀,怎么会这样……纠结了老半天!!!


  • 1
  • 2

Reply