本节内容:
- 面向对象高级语法部分
- 静态方法、类方法、属性方法
- 类的特殊方法
- 反射
- 异常处理
- 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,即:输出类