zoukankan      html  css  js  c++  java
  • day7----面向对象编程进阶

    本节内容:

    • 面向对象高级语法部分
      • 静态方法、类方法、属性方法
      • 类的特殊方法
      • 反射
    • 异常处理
    • Socket开发基础

    静态方法

    它与类唯一的关联就是需要通过类名来调用这个方法

    #静态方法实际跟类没关系,不存在self变量了。
    #只是名义上贵归类管理,实际上在静态方法里,访问不了类或实例中的任何属性

    1. 调用时主动传递实例本身给eat方法,即d.eat(d) 

    2. 在eat方法中去掉self参数,但这也意味着,在eat中不能通过self.调用实例中的其它变量了

    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    # Author:DCC
    
    class Dog(object):
        def __init__(self,name):
            self.name = name
        def eat(self,food):
            print("%s is eatting %s" % (self.name,food))
    d = Dog("dog1")
    d.eat("包子")
    
    #静态方法
    class Cat(object):
        def __init__(self,name):
            self.name = name
        @staticmethod #静态方法实际跟类没关系,不存在self变量了。
        #只是名义上贵归类管理,实际上在静态方法里,访问不了类或实例中的任何属性
        def eat(self,food):
            print("%s is eatting %s" % (self,food))
    d = Cat("dog1")
    d.eat("cat1","baozi")

    类方法

    类方法通过@classmethod装饰器实现,类方法和普通方法的区别是, 类方法只能访问类变量,不能访问实例变量

    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    # Author:DCC
    
    class Dog(object):
        name = "nn"
        def __init__(self,name):
            self.name = name
        @classmethod
        def eat(self,food):
            print("%s is eatting %s" % (self.name,food))
    d = Dog("dog1")
    d.eat("包子")
    
    #静态发放中,类方法只能访问类变量,不能访问实例变量
    #运行结果
    nn is eatting 包子

    属性方法

    属性方法的作用就是通过@property把一个方法变成一个静态属性

    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    # Author:DCC
    
    class Dog(object):
        name = "nn"
        def __init__(self,name):
            self.name = name
        @property
        def eat(self):
            print("%s is eatting " % (self.name))
        # @eat.setter
        # def eat(self,food1):
        #     print("set to food:", food1)
    
    d = Dog("dog1")
    d.eat
    
    #属性方法:把一个方法,变成一个静态属性,不能传参数,可以特殊赋值

    类的特殊成员方法

    __doc__ #输出:类的描述信息

    class Foo:
        """ 描述类信息,这是用于看片的神奇 """
        def func(self):
            pass
    print(Foo.__doc__)

    __module__ 和  __class__ 

    __module__ 表示当前操作的对象在那个模块

    __class__     表示当前操作的对象的类是什么

    class C:
    
        def __init__(self):
            self.name = 'wupeiqi'
    from lib.aa import C
    
    obj = C()
    print obj.__module__  # 输出 lib.aa,即:输出模块
    print obj.__class__      # 输出 lib.aa.C,即:输出类
  • 相关阅读:
    【转帖】流程与IT管理部——IT支撑业务变革的必然趋势
    【转帖】39个让你受益的HTML5教程
    【转帖】2015年2月份最佳的免费 UI 工具包
    【消息】Pivotal Pivots 开源大数据处理的核心组件
    【转帖】创业者,你为什么这么着急?
    教程:SpagoBI开源商业智能之XML Template 图表模板
    教程:Spagobi开源BI系统 Console报表设计教程
    【转帖】Mysql多维数据仓库指南 第一篇 第1章
    Kiss MySQL goodbye for development and say hello to HSQLDB
    梯度消失和梯度爆炸问题详解
  • 原文地址:https://www.cnblogs.com/dcc001/p/5843327.html
Copyright © 2011-2022 走看看