2017.11.14类属性、实例属性

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是一种多态语言,崇尚鸭子类型。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、快捷键 ctr+b 执行ctr+/ 单行注释ctr+c ...
    o_8319阅读 11,100评论 2 16
  • 包(lib)、模块(module) 在Python中,存在包和模块两个常见概念。 模块:编写Python代码的py...
    清清子衿木子水心阅读 9,197评论 0 27
  • 要点: 函数式编程:注意不是“函数编程”,多了一个“式” 模块:如何使用模块 面向对象编程:面向对象的概念、属性、...
    victorsungo阅读 5,498评论 0 6
  • 一、多态 1.概念 一种事物的多种体现形式,函数的重写其实就是多态的一种体现在Python中,多态指的是父类的引用...
    hollow_02f9阅读 11,225评论 0 1
  • 一 周五是hanna幼儿园万圣节活动,班里老师邀请家长和孩子们一起表演亲子节目。 因为给她准备了白雪公主的服装,我...
    竹筠益阅读 4,547评论 0 0