1、文字描述 类属性、实例属性的区别。
类也是一种对象.
实例属性只属于当前这一个实例对象的.self访问的都是实例属性.
类是一种描述,类属性是属于每一个实例对象的,每一个对象都有类属性.而且都是一样的,只有一份.类属性所有的实例方法都共享.如果对象也有同名的实例属性,对象访问的时候,优先使用实例属性.其次才是类属性.实例属性会屏蔽掉同名的类属性.
2、写代码创建类属性和实例属性并注释指明是类属性还是实例属性
实例属性:
class Person:
sun = 1
p1=Person()
p2=Person()
#获取类属性,每一个对象都有类属性
print(p1.sun)
print(p2.sun)
print(Person.sun)
print('****************************************************************')
Person.sun=0
print(p1.sun)
print(p2.sun)
print(Person.sun)
类属性:
class Person:
sun = 1
p1=Person()
p2=Person()
#获取类属性,每一个对象都有类属性
print(p1.sun)
print(p2.sun)
print(Person.sun)
print('****************************************************************')
Person.sun=0
print(p1.sun)
print(p2.sun)
print(Person.sun)
print('****************************************************************')
#这里的sun是一个p1的实例属性
p1.sun=1111
print(p1.sun)
#p2是类属性
print(p2.sun)
print(Person.sun)
3、文字描述 类方法、实例方法、静态方法的区别。
答:
类方法是类对象所拥有的方法,需要用修饰器@classmethod(注解、元数据)来标识其为类方法,对于类方法,第一个参数必须是类对象,一般以cls作为第一个参数,能够通过实例对象和类对象去访问。类方法还有一个用途就是可以对类属性进行修改.
用实例属性调出来的方法就是实例方法.实例方法的第一个参数是实例对象self.
静态方法 需要通过修饰器@staticmethod来进行修饰,静态方法不需要多定义参数.
总结:
从类方法和实例方法以及静态方法的定义形式就可以看出来,类方法的第一个参数是类对象cls,那么通过cls引用的必定是类对象的属性和方法;而实例方法的第一个参数是实例对象self,那么通过self引用的可能是类属性、也有可能是实例属性(这个需要具体分析),不过在存在相同名称的类属性和实例属性的情况下,实例属性优先级更高。静态方法中不需要额外定义参数,因此在静态方法中引用类属性的话,必须通过类对象来引用.
4、写代码创建类方法、实例方法、静态方法并注释指明是类方法、实例方法、静态方法
class Person:
def f1(self):
print('f1...self=%s,id(self)=%s'%(self,id(self)))
self.num=120 #实例方法
@classmethod
def f2(cls): #类方法
print('f2...cls=%s,id(cls)=%s'%(cls,id(cls)))
cls.num=110 #类属性
p1=Person()
p1.f1()
print(id(p1))
# Person.f1(p1)
print('****************************')
p1.f2()
print(id(Person))
Person.f2()
print(Person.num)
print('****************************')
print(p1.num)
print('****************************')
print('****************************')
p2 = Person()
print(p2.num)
print('****************************')
class Person:
@staticmethod #静态的
def f1(): #静态方法
print('我是静态的,不强制传参')
p1 = Person()
p1.f1()
Person.f1()
print('****************************')
5、文字说明,你对面向对象的理解。
将数据与函数绑定到一起,进行封装,这样能够更快速的开发程序,减少了重复代码的重写过程.
按人们认识客观世界的系统思维方式,采用基于对象(实体) 的概念建立模型,模拟客观世界分析、设 计、实现软件的办法。
面向对象是一种设计思想
1 符合人们的思考习惯
2 把执行者变成指挥者
3 简化功能,把复杂的事情简单化
想完成一个事,找具有这样功能的对象,如果能找到,调用这个对象的功能,完成这个事
如果找不到,创建具有这样功能的对象,再调用完成这个事.
6、文字说明面向对象的三大特征是什么?怎么理解。
封装 继承 多态
封装:类是一种封装,将属性和方法封装。
函数也是一种封装,将具有一定共的逻辑代码封装到一个函数中,使用的时候调用即可
提高代码的扩展性。
继承:将共性的属性和方法放在父类中,子类只需要关注自己特有的属性和方法.提高代码的扩展性.
python中所有的内容都是对象,所有的对象都直接或间接继承了.虽然子类没有定义__init__方法,但是父类有,所以在子类继承父类的时候这个方法就被继承了,所以只要创建Bosi的对象,就默认执行了那个继承过来的__init__方法.子类在继承的时候,在定义类时,小括号()中为父类的名字父类的属性、方法,会被继承给子类.
多态:
一个对象在不同的情况下,具有不同的形态,用于强类型语言。是使用在继承和接口中实现。
Python中有两种说法:
1、python支持多态,python是一个弱类型,本身一个变量名,可以存储任何类型的值,可以理解为多种形态
2、python不支持多态,多态本身是用于强类型语言的,python是一个弱类型,所以不支持多态
Python不支持多态,也不用支持多态,python是一种多态语言,崇尚鸭子类型。