Python学习---面向对象的学习[深入]

类的深入学习

   a. Python中一切事物都是对象

    b. class Foo:

            pass       

        obj = Foo()

        # obj是对象,Foo类

        # Foo类也是一个对象,type的对象

    c. 类都是type类的对象   type(..)

      “对象”都是以类的对象 类()

    d. 类实际上是type类型的对象,所有的类都是Object的子类

创建类的方法[2种]

# 第一种:类实际上是type类型的对象,所有的类都是Object的子类
Foo = type(‘Foo‘, (object,), {‘func‘: ‘function‘})

# 第二种:
class Foo:
    def func(self):
        print(123)
f = Foo()
f.func()

利用metaclass创建类: 必须继承type类,同时init必须传递4个参数过去

 必须继承type类   ---代码有误---
class MyType(type): # the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases
    # 必须给出4个参数
    def __init__(self, *args,  **kwargs):  # __init__() takes 1 positional argument but 4 were given
        print(‘Mytype创建类对象‘)
    def __call__(self, *args,  **kwargs):
        print(‘Mytype的call方法‘)
    def __new__(self, *args,  **kwargs):
        print(‘Mytype的new方法‘)
class Foo(object, metaclass=MyType):
    def func(self):
        print(123)
   # 创建对象后执行init方法
   def __new__(self, *args, **kwargs):
       print(‘Foo的new方法‘)
       return ‘返回Foo的对象‘
f = Foo()   # 调用MyType的__init__方法,Foo是MyType的对象,Foo()会调用MyType的__call__方法
f.func()    # Mytype创建类对象,这里是有MyType的
            # 123

【转载】类的创建原理图:

异常处理

被动异常

try:
    pass
except IndentationError as e:
    pass
except ValueError as e:  # 小的Exception放在Exception前面
    pass
except Exception as e:   # e是Exception的对象,封装了Exception信息
    pass
else:                    # 正常代码正常,则执行else,否则执行else
    pass
finally:
    pass                 # 出错不出错,一定要执行的代码

主动触发异常: raise Exception("Sorry")

try:
    raise Exception("Sorry")
except Exception as e:
    print(e)

自定义异常:继承Exception类来实现

class HhH(Exception):
    def __init__(self, msg):
        self.message = msg
    def __str__(self):
        return  self.message   # 这里只需要返回就可以了,不能直接打印
try:
    raise HhH(‘hhh, Wrong‘)
except HhH as e:
    print(e)

断言assert

assert 比较的内容: 条件成立,则打印XXX,否则报错

一般用强制用户的服从,Java从1.2开始也添加了这个功能,但是一般实际中不用。Python源码中有用到

assert 1 < 5
print(‘hhh‘)

反射

1. 通过字符串操作对象的成员(方法,字段):

class Foo:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def fun(self):
        print(‘%s-%s‘ % (self.name, self.age))

obj = Foo(‘ftl‘, 23)
print(obj.name)
b = ‘name‘
print(‘obj.__dict__[b]:‘,obj.__dict__[b])   # 通过字典取值
print("getattr(obj, ‘name‘):",getattr(obj, ‘name‘))  # 通过内置函数getattr取出值
fun = getattr(obj, ‘fun‘)
fun()
setattr(obj, ‘school‘, ‘xupt‘)
print(hasattr(obj, ‘school‘))
print(delattr(obj, ‘school‘))

模块级别的反射:

class Foo():
    NAME = ‘ftl‘
    def hello(self):
        print(‘hello‘)
print(getattr(Foo, ‘NAME‘))
hello = getattr(Foo(), ‘hello‘)     # 取到函数的内存地址
print(hello)
print(hello())                      # 取到函数的对象

单例模式

class Foo:
    __instance = None

    def __init__(self, name, age):
        self.age = age
        self.name = name

    @classmethod                          # 静态方法
    def get_Instance(cls):
        if cls.__instance:
            return cls.__instance
        else:
            cls.__instance = Foo(‘hhh‘, 23)
            return cls.__instance

    def show(self):
        print(self.age, self.name)
obj = Foo.get_Instance()
obj.show()

【更多学习】

选课系统

面向对象编程更多参考

原文地址:https://www.cnblogs.com/ftl1012/p/9383687.html

时间: 2024-10-05 22:48:58

Python学习---面向对象的学习[深入]的相关文章

PyTorch框架+Python 3面向对象编程学习笔记

一.CNN情感分类中的面向对象部分 sparse.py 1 super(Embedding, self).__init__() 表示需要父类初始化,即要运行父类的_init_(),如果没有这个,则要自定义初始化 1 self.weight = Parameter(torch.Tensor(num_embeddings, embedding_dim)) Parameter跳转 1 class Parameter(Variable): 2 """A kind of Variabl

转 python语法学习面向对象之继承

传送门 python语法学习面向对象之继承 只要涉及到面向对象,”类“是必须出现的一个代名词. 类和对象是面向对象编程的两个主要方面.类创建一个新类型,而对象是这个类的实例. 类的一些概念: 包括初始化方法__init__,可以理解为构造,self,理解为this,等等在前一篇文章中介绍过,现在就学习类的继承. 继承: 面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制.继承完全可以理解成类之间的类型和子类型关系. 需要注意的地方:继承语法   class 派生类

Python 3学习 ——面向对象

Python 学习--面向对象 写此博客 是为了激励自己,并且将自己的心得以及遇到的问题与人分享 一.面向对象基础 面向对象就是一个类和对象的应用. 1.定义方法: ---------------------------------------------------------------- class 类名: def 方法名(self , arg): print(arg) 中间人 = 类名() 中间人.方法名(arg) ------------------------------------

Python学习—面向对象学习下

面向对象下 1.构造方法与析构方法 class People(object): # 构造方法:__init__(),在实例化对象时自动执行的方法 def __init__(self, name, age): self.name = name self.age = age print("创建对象成功.......") # 析构函数:__del__(), 当你删除对象时,自动调用的方法 # 删除对象:del 对象名 def __del__(self): print("删除对象成功

Python 初识面向对象#学习猿地

> 面向对象编程——Object Oriented Programming,简称`OOP`,是一种**以对象为中心**的程序设计思想. > > 面向过程编程——Procedure Oriented Programming,简称`POP`,是一种**以过程为中心**的程序设计思想. ## 理解面向过程与面向对象思想 大家先思考一个问题:把大象装进冰箱,需要几步? 小品给出的答案:三步 第一步:打开冰箱门 第二步:把大象装进去 第三步:关上冰箱门 ##### 用面向过程去理解 > 上面

python基础教程_学习笔记9:抽象

抽象 懒惰即美德. 抽象和结构 抽象可以节省大量工作,实际上它的作用还要更大,它是使得计算机程序可以让人读懂的关键. 创建函数 函数可以调用(可能包含参数,也就是放在圆括号中的值),它执行某种行为并且返回一个值.一般来说,内建的callable函数可以用来判断函数是否可调用: >>> import math >>> y=1 >>> x=math.sqrt >>> callable(x) True >>> callab

面向对象先导学习笔记

面向对象先导学习笔记 经过了Python.C语言和数据结构的学习,感觉对于Java这门新学习的语言上手速度明显快了许多.在学习Java的过程中,个人觉得Java的语法规则在很大程度上与C类似,但是在设计程序和具体实现的过程中,更偏向于Python的思路,尤其是对于方法的调用和自带数据结构的使用方面. 数据类型的Java实现 Java自带了大量的数据类型,在完成作业的过程中,个人尝试通过手写二叉树完成问题,但是与Java自带的数据结构相比,无论是在稳定性和运行速度方面都有所欠缺.但是通过自己的摸索

python基础知识的学习和理解

参考链接:https://github.com/yanhualei/about_python/tree/master/python_learning/python_base python基础知识笔记 Flask aiohttp的学习和理解 assert() asyncio的学习和理解 continue_break学习和理解 cprofile代码效率分析 datatime dict字典学习与理解 django_project eval() filter() gevent协程的学习和理解 http服

python全栈开发学习目录

python全栈开发学习目录 第一章 计算机基础 第二章Python入门 第三章数据类型 第四章文件操作 第五章函数 第六章 模块 第七章 面向对象 第八章 网络编程 第九章 并发编程 第十章 数据库 第十一章 前端开发-html 第十一章 前端开发-css 附加:js特效 15个小demo 第十一章 前端开发-JavaScript 第十一章 前端开发-jQuery 第十一章 前端开发-bootstrap 第十二章 Django框架开发 ... 原文地址:https://www.cnblogs.