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,即:输出类
原文地址:https://www.cnblogs.com/dcc001/p/5843327.html