1.  
  1. #-*- coding:utf8 -*-
  2. # 静态方法@staticmethod
  3. # 静态方法(当eat变成静态方法后,再通过实例调用时就不会自动把实例本身当作一个参数传给self了。)
  4. class Dog(object):
  5. def __init__(self, name):
  6. self.name = name
  7. #@staticmethod # 静态方法(当eat变成静态方法后,再通过实例调用时就不会自动把实例本身当作一个参数传给self了。)
  8. def eat(self):
  9. print("%s is eating" % self.name)
  10.  
  11. d = Dog("ChenRonghua")
  12. d.eat()
  13. #报错信息
  14. #TypeError: eat() missing 1 required positional argument: 'self'
  1.  
  1. # 类方法
  2. # 类方法通过@classmethod装饰器实现,类方法只能访问类变量,不能访问实例变量
  3. # (当eat变成静态方法后,再通过实例调用时就不会自动把实例本身当作一个参数传给self了。)
  4. class Dog(object):
  5. def __init__(self, name):
  6. self.name = name
  7. @staticmethod
  8. def eat():
  9. print("%s is eating")#因为name是个实例变量,类方法是不能访问实例变量的
  10.  
  11. d = Dog("ChenRonghua")
  12. d.eat()
  1.  
  1. class Dog(object):
  2. name = "我是类变量"
  3.  
  4. def __init__(self, name):
  5. self.name = name
  6. self.__food=None
  7.  
  8. @classmethod
  9. def eat(self):
  10. print("%s is eating" % self.name)
  11. def __call__(self, *args, **kwargs):#构造方法:对象=类名() __call__ 则是:对象()
  12. print("running call",args,kwargs)
  13.  
  14. def __str__(self):
  15. return 'obj:%s'%self.name
  16.  
  17. d = Dog("ChenRonghua")
  18. d(2,3,4,name='开发量')#__call__ 则是:对象()
  19. print(d.__dict__)#打印的是实例属性{'name': 'ChenRonghua', '_Dog__food': None}
  20. print(Dog.__dict__)#打印的是类的属性
  21. print(d)#module对象想知道它是谁__str__
  22.  
  23. d.eat()
  24.  
  25. #把一个类做成字典了
  1. #属性方法
  2. #属性方法的作用就是通过@property把一个方法变成一个静态属性
  3.  
  4. class Dog(object):
  5. ''' 类是描述狗这个对象'''
  6. def __init__(self, name):
  7. self.name = name
  8.  
  9. @property
  10. def eat(self):
  11. print(" %s is eating" % self.name)
  12.  
  13. d = Dog("ChenRonghua")
  14. print (Dog.__doc__)
  15.  
  16. #d.eat() #因为eat此时已经变成一个静态属性了, 不是方法了, 想调用已经不需要加()号了,直接d.eat就可以了
  17. d.eat
  1. #@property 的实例---航班查询
  2. #这个status属性的值是一系列动作后才得到的结果
  3.  
  4. class fly(object):
  5. def __init__(self,name):
  6. self._name=name
  7. def check_status(self):
  8. print("%s fly status"%self._name)
  9. return 2
  10. @property
  11. def fly_status(self):
  12. status=self.check_status()
  13. if status==0:
  14. print ("quxiao")
  15. elif status==1:
  16. print("daoda")
  17. elif status == 2:
  18. print("ready")
  19. else:
  20. print("later")
  21. d=fly("k7")
  22. d.fly_status
  23.  
  24. #-----------另一种
  25. class fly(object):
  26. def __init__(self,name):
  27. self._name=name
  28. def check_status(self):
  29. print("%s fly status"%self._name)
  30. return 2
  31. def fly_status(self):
  32. status=self.check_status()
  33. if status==0:
  34. print ("quxiao")
  35. elif status==1:
  36. print("daoda")
  37. elif status == 2:
  38. print("ready")
  39. else:
  40. print("later")
  41. d=fly("k7")
  42. d.fly_status()
  1. #__doc__表示类的描述信息
  2. class Foo:
  3. """ 描述类信息,这是用于看片的神奇 """
  4.  
  5. def func(self):
  6. pass
  7.  
  8. print(Foo.__doc__)

  1. #__call__对象后面加括号
  2. #构造方法,即:对象 = 类名() ;
  3. #__call__方法 即:对象() 或者 类()()
  4.  
  5. class Foo:
  6. def __init__(self):
  7. print("__init__")
  8.  
  9. def __call__(self, *args, **kwargs):
  10. print('__call__')
  11.  
  12. obj = Foo() # 执行 __init__
  13.  
  14. obj() # 执行 __call__
  1. #如果一个类中定义了__str__方法,那么在打印 对象 时,默认输出该方法的返回值
  2.  
  3. class Foo:
  4. def __str__(self):
  5. return 'alex li'
  6. obj = Foo()
  7. print(obj)
  1. #生命的起源是通过Type来实现的
  2. def func(self):
  3. print ("hello %s"%self.name)
  4.  
  5. def __init__(self,name,age):
  6. self.name=name
  7. self.age=age
  8.  
  9. foo=type("foo",(object,),{"talk":func,
  10. "__init__":__init__})
  11. f =foo("alex",32)
  12. f.talk()
  13.  
  14. print(type(foo)) #<class 'type'>
  1. #-*- coding:utf8 -*-
  2. class Dog():
  3. def __init__(self,name):
  4. self.name=name
  5. def eat(self):
  6. print ("%s is eating..."%self.name)
  7.  
  8. d=Dog("zhangsan")
  9. choice=input(">>:").strip()
  10. # print (hasattr(d,choice))#>>:eat---True
  11. # getattr(d,choice)() #zhangsan is eating...
  12. if hasattr(d,choice):
  13. func=getattr(d,choice)
  14. func()
  1. #-*- coding:utf8 -*-
  2. def dulk(self):
  3. print("%s is yelling.."%self.name)
  4. class Dog():
  5. def __init__(self,name):
  6. self.name=name
  7. def eat(self,food):
  8. print ("%s is eating..."%self.name,food)
  9.  
  10. d=Dog("zhangsan")
  11. choice=input(">>:").strip()
  12. # print (hasattr(d,choice))#>>:eat---True
  13. # getattr(d,choice)() #zhangsan is eating...
  14. if hasattr(d,choice):
  15. func=getattr(d,choice)
  16. func("lisi") #>>:eat --zhangsan is eating... lisi
  17. #hasattr (obj,name_str)判断一个对象是否有对应的name_str字符串的
  18. #getattr(obj,name_str)根据字符串去获取对象对应方法里的内存地址
  19. else :
  20. # setattr(d,choice,dulk)
  21. # d.talk(d)
  22. setattr(d,choice,32)
  23. print(getattr(d,choice)) #>>:talk --32
  1. #-*- coding:utf8 -*-
  2. def dulk(self):
  3. print("%s is yelling.."%self.name)
  4. class Dog():
  5. def __init__(self,name):
  6. self.name=name
  7. def eat(self,food):
  8. print ("%s is eating..."%self.name,food)
  9.  
  10. d=Dog("zhangsan")
  11. choice=input(">>:").strip()
  12. # print (hasattr(d,choice))#>>:eat---True
  13. # getattr(d,choice)() #zhangsan is eating...
  14. if hasattr(d,choice):
  15. getattr(d,choice)
  16. else :
  17. # print(setattr(d,choice,None))
  18. setattr(d,choice,dulk)
  19. func=getattr(d,choice)
  20. func(d)
  1. #-*- coding:utf8 -*-
  2. def dulk(self):
  3. print("%s is yelling.."%self.name)
  4. class Dog():
  5. def __init__(self,name):
  6. self.name=name
  7. def eat(self,food):
  8. print ("%s is eating..."%self.name,food)
  9.  
  10. d=Dog("zhangsan")
  11. choice=input(">>:").strip()
  12. # print (hasattr(d,choice))#>>:eat---True
  13. # getattr(d,choice)() #zhangsan is eating...
  14. if hasattr(d,choice):
  15. func=getattr(d,choice)
  16. setattr(d ,choice,"xiaobai")
  17. # func("lisi") #>>:eat --zhangsan is eating... lisi
  18. #hasattr (obj,name_str)判断一个对象是否有对应的name_str字符串的
  19. #getattr(obj,name_str)根据字符串去获取对象对应方法里的内存地址
  20. else :
  21. # setattr(d,choice,dulk)
  22. # d.talk(d)
  23. setattr(d,choice,32)
  24. print(getattr(d,choice))
  25. print(d.name) #>>:name----xiaobai
  26. #setattr (obj,'y',z) is equitvalent to x.y=z 对对象添加新的属性

异常处理

  1. #-*- coding:utf8 -*-
  2. #---字典出错,列表出错
  3. data={}
  4. names=['zhangsan','lisi']
  5. # data['name'] #KeyError: 'name'
  6. try:
  7. names[3] #这个报错,下一个错误就不会执行了
  8. data['name']
  9.  
  10. except KeyError as e:
  11. print('没有这个key',e)
  12. except IndexError as e:
  13. print("列表操作错误", e)
  1. try_未知错误-Exception最后用
  1. data={}
  2. names=['zhangsan','lisi']
  3. # data['name'] #KeyError: 'name'
  4. try:
  5. open("test.txt")
  6. names[3] # 如果它放在try的第一位 就不报未知错误
  7. data['name']
  8.  
  9. except KeyError as e:
  10. print('没有这个key',e)
  11. except IndexError as e:
  12. print("列表操作错误", e)
  13. except Exception as e: #错误排除不出来,最后报未知错误
  14. print ("未知错误",e )
  1. ValueError
  1. #-*- coding:utf8 -*-
  2. s1="hello"
  3. try:
  4. int(s1)
  5. except ValueError as e:
  6. print ("类型不正确",e)
  1. 两种错误都采用统一的处理办法
  1. #-*- coding:utf8 -*-
  2. #---字典出错,列表出错
  3. data={}
  4. names=['zhangsan','lisi']
  5. # data['name'] #KeyError: 'name'
  6. try:
  7. names[3] #这个报错,下一个错误就不会执行了
  8. data['name']
  9.  
  10. except (KeyError ,IndexError) as e:
  11. print('没有这个key',e)
  12. # except IndexError as e:
  13. # print("列表操作错误", e)
  1. 自定义异常
  1. #-*- coding:utf8 -*-
  2. #__str__类返回什么格式
  3. class flmException(Exception):
  4. def __init__(self,msg):
  5. self.message=msg
  6. # def __str__(self):
  7. # return self.message #替换为 return "abc"
  8. try:
  9. raise flmException("数据库连不上")
  10. except flmException as e:
  11. print(e)
  1.  
  1.  

python7 静态方法、类方法、属性方法 ;反射;异常处理的更多相关文章

  1. python静态方法类方法属性方法

    Python的静态方法和类成员方法都可以被类或实例访问,两者概念不容易理清,但还是有区别的: 1)静态方法无需传入self参数,类成员方法需传入代表本类的cls参数: 2)从第1条,静态方法是无法访问 ...

  2. 面向对象【day08】:静态方法、类方法、属性方法(九)

    本节内容 概述 静态方法 类方法 属性方法 总结 一.概述 前面我们已经讲解了关于类的很多东西,今天讲讲类的另外的特性:静态方法(staticmethod).类方法(classmethod).属性方法 ...

  3. python-day7-静态方法、类方法、属性方法、特殊成员方法、反射、异常处理、socket

    @特殊方法.异常处理.反射.socket @类 属性 实例变量 类变量 私有属性__var 方法 构造方法, 析构函数(python自带,不写也有,写了相当与重构) 私有方法 继承 继承 组合 @7. ...

  4. Python全栈开发之7、面向对象编程进阶-类属性和方法、异常处理和反射

    一.类的属性 1.@property属性 作用就是通过@property把一个方法变成一个静态属性 class Room: def __init__(self,name,length,width,he ...

  5. Python3学习之路~7.1 静态方法、类方法、属性方法

    静态方法 通过@staticmethod装饰器即可把其装饰的方法变为一个静态方法,什么是静态方法呢?其实不难理解,普通的方法,可以在实例化后直接调用,并且在方法里可以通过self.调用实例变量或类变量 ...

  6. Python 静态方法,类方法,属性方法

    方法的使用 静态方法 - 只是名义上归类管理,实际上在静态方法里访问不了类或实例中的任何属性. class Dog(object): def __init__(self,name): self.nam ...

  7. python第三十三天----静态方法、类方法、属性方法

    @staticmethod 装饰后,类中的方法转成静态方法 class a: @staticmethod def b(self): print('') 静态方法不可以访问实例变量或类变量,相当于类中的 ...

  8. Python面向对象静态方法,类方法,属性方法

    Python面向对象静态方法,类方法,属性方法 属性: 公有属性 (属于类,每个类一份) 普通属性 (属于对象,每个对象一份) 私有属性 (属于对象,跟普通属性相似,只是不能通过对象直接访问) 方法: ...

  9. python中的静态方法、类方法、属性方法(福利:关于几种方法更好的解释)

    该部分的三个属性都是高级方法,平时用的地方不是很多 一.静态方法 静态方法的使用不是很多,可以理解的就看一下,用的地方不是很多 class Dog(object): def __init__(self ...

随机推荐

  1. CentOS安装Git

    准备安装Gityum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel #下载git-1 ...

  2. 新版mysql(mysql-5.7.12-winx64)安装

    之前安装了一个php集成运行环境的mysql,不太习惯,还是想弄一个原生的环境来进行学习.于是,卸载了php集成环境中的mysql. 计算机环境:win7 x64. 1.mysql-5.7.12-wi ...

  3. Java最全文件操作实例汇总

    本文实例汇总了Java文件操作.分享给大家供大家参考,具体如下: 1.创建文件夹 ? 1 2 3 4 5 6 7 8 9 10 11 //import java.io.*; File myFolder ...

  4. Lintcode: Segment Tree Query II

    For an array, we can build a SegmentTree for it, each node stores an extra attribute count to denote ...

  5. Codeforce Round #214 Div2

    我是不是快要滚蛋了,这次CF爆0? 居然第一题都过不去了,妈蛋附近有没有神经病医院,我要去看看! 精力憔悴! 第一题,我以为要恰好这么多钱,不能多余,想想这也没必要,不符合逻辑,及自己就是这么傻逼! ...

  6. [转] linux中常用的命令

    系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS ...

  7. 0422 数学口袋精灵app

    首先要部署这个app项目就是第一步: 一.前提下载并安装JDK 在线图解:手把手教你安装JDK      http://www.lvtao.net/server/windows-setup-jdk.h ...

  8. 关于C# winform 快速制作不规则边框的方法

    今天逛博客园突然发现一个帖子写的   快速建立不规则边框的方式 突然发现以前自己用API的方式好傻… 杀鸡焉用牛刀  下边是从网上不断转载的 原帖: 地址:http://www.cnblogs.com ...

  9. 10---Net基础加强

    复习: using System; using System.Collections.Generic; using System.Linq; using System.Text; using Syst ...

  10. react tab

    <!DOCTYPE html> <html> <head> <script src="js/react.js"></scrip ...