一、对象 = 属性(静态) + 方法(动态)
二、OO(object oriented) 面向对象 的特征
1)封装
2)继承
3)多态
三、对象中的属性和方法,在编程中实际是什么?
变量(属性)和函数(方法)
四、类和对象是什么关系?
类和对象之间的关系就如同用模具和用这个模具制作出来的物品之间的关系。一个类为他的全部对象给出了一个统一的定义,而他的每个对象则是符合这种定义的一个实体,因此类和对象的关系就是抽象和具体的关系。
五、类的属性定义应该尽可能抽象还是具体?
正确的做法是尽可能的抽象,因为这样更符合面向对象的思维。
PS:类的实例化结果就是对象,而对一类对象的抽象就是类。
类描述了一组有相同特性(属性)和相同行为(方法)的对象。
六、如果我们不希望对象的属性或方法被外部直接引用,我们可以怎么做?
答:我们可以在属性或方法名字前边加上双下划线,这样子从外部是无法直接访问到,会显示AttributeError错误。
>>> class Person:
__name = "小甲鱼"
def getName(self):
return self.__name
>>> p = Person()
>>> p.__name
Traceback (most recent call last):
File "<pyshell#57>", line 1, in <module>
p.__name
AttributeError: 'Person' object has no attribute '__name'
PS:我们把getName方法称之为"访问器"。Python事实上是采用一种叫"name mangling"技术,将以双下划线开头的变量名巧妙的改了个名字而已,我们仍然可以在外部通过"_类名__变量名"的方式访问:
>>> p._Person__name
'小甲鱼'
当然我们并不提倡这种抬杠较真粗暴不文明的访问形式……
七、类在实例化后哪个方法会被自动调用?
答:__init__方法会在类实例化时被自动调用,我们称之为魔法方法。你可以重写这个方法,为对象定制初始化方案。