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,即:输出类
  • 相关阅读:
    xna 添加一个精灵1
    【leetcode】705. 设计哈希集合
    【leetcode】1603. 设计停车系统
    【leetcode】设计有序流
    【leetcode】旅行终点站
    【leetcode】检测大写字母
    【leetcode】重复至少 K 次且长度为 M 的模式
    【leetcode】二叉树的直径
    【leetcode】公交站间的距离
    【leetcode】分糖果
  • 原文地址:https://www.cnblogs.com/dcc001/p/5843327.html
Copyright © 2011-2022 走看看