博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面向对象的补充
阅读量:5144 次
发布时间:2019-06-13

本文共 1345 字,大约阅读时间需要 4 分钟。

 

面向对象的两个概念(类和对象)

类是一类事物的抽象表示形式

对象是某类事物的一个具体实例

 

那么究竟先有类还是现有实例对象?

从设计角度来讲:必须是先有实例对象(或者是一种脑海中的概念),后有类。

从不同的实例对象抽象出类的定义。

比如:现在需要使用到一种称为FlyPig的对象,它既能像pig一样的吃,也能像bird一样的飞

如果现实世界中有这样的东西,那么就从它们身上抽取共同点,形成类。

如果现实世界中没有这样的东西,那么就在脑海中想象它们应该有什么特点,从而抽象出类。

从使用的角度来讲:先有类,才能实例化对象。

类就是一种创建不同实例对象的模板 

关于抽象类的补充

from abc import ABCMeta, abstractmethodclass A(metaclass=ABCMeta):    def __init__(self):        self.name = 'abc'    # 通常抽象方法中都不会定义方法体,如果有方法体的话,可以封装成类方法,用类名调用,因为抽象类不能实例化,只能通过类名调用    @classmethod    @abstractmethod    def func(cls):        print('A.func()')A.func()

以上是抽象类中的抽象方法如何被调用,由于不能实例化对象,只能是通过装饰成类方法类通过类名调用

注意:两个装饰器的顺序,@classmethod必须在上边!!!

动态添加实例属性和实例方法

class A():    passa = A()# 动态添加实例变量a.name = 'Andy'print(a.__dict__)# 定义函数,至少提供一个绑定对象的参数def func(self):    print(self.name)a.func = funcprint(a.__dict__)# 调用新添加的实例方法,需要手动绑定第一个参数为当前对象a.func(a)

第二种添加实例方法的方式:

# 第二种添加实例方法的方式,使用types模块中的MethodType类from types import MethodType# 定义函数,至少提供一个用于绑定对象的参数def func2(self):    print('func2')a.func2 = MethodType(func2, a)a.func2()

类的动态性:

python是一门动态语言,意味着在程序运行期间,可以动态的对类的定义进行修改。

class A():    # 定义类时指定类的属性name    name = 'A'    def show(self):        print('show')A.a = 10  # 给类A添加类属性aprint(A.__dict__)

 

各种方法的使用总结:

  类名调用 对象名调用
实例方法 可以
但需要手动绑定第一个参数
可以
类方法(classmethod) 可以 可以
静态方法(staticmethod) 可以 可以
类变量 可以 可以

 

转载于:https://www.cnblogs.com/biao-wu/articles/10678743.html

你可能感兴趣的文章
如何将应用完美迁移至Android P版本
查看>>
【转】清空mysql一个库中的所有表的数据
查看>>
基于wxPython的python代码统计工具
查看>>
淘宝JAVA中间件Diamond详解(一)---简介&快速使用
查看>>
一种简单的数据库性能测试方法
查看>>
如何给JavaScript文件传递参数
查看>>
开源 高性能 高可用 可扩展
查看>>
JDBC
查看>>
Struts2(十三)国际化-internationalization
查看>>
经典SQL语句基础50题
查看>>
vs2010 无法加载 asp.net mvc2 项目标解决规划
查看>>
去掉^M
查看>>
前台线程和后台线程
查看>>
前端 HTML body标签相关内容 常用标签 表格标签 table
查看>>
【SICP练习】126 练习3.57
查看>>
拟双飞翼布局
查看>>
vue router 根据不同的id切换链接界面不刷新
查看>>
数论:HDU1066-Last non-zero Digit in N!
查看>>
2015-2-10 ecshop
查看>>
REST API disable / enable service auto start by API
查看>>