#-*- coding:utf8 -*-
# 静态方法@staticmethod
# 静态方法(当eat变成静态方法后,再通过实例调用时就不会自动把实例本身当作一个参数传给self了。)
class Dog(object):
def __init__(self, name):
self.name = name
#@staticmethod # 静态方法(当eat变成静态方法后,再通过实例调用时就不会自动把实例本身当作一个参数传给self了。)
def eat(self):
print("%s is eating" % self.name) d = Dog("ChenRonghua")
d.eat()
#报错信息
#TypeError: eat() missing 1 required positional argument: 'self'

# 类方法
# 类方法通过@classmethod装饰器实现,类方法只能访问类变量,不能访问实例变量
# (当eat变成静态方法后,再通过实例调用时就不会自动把实例本身当作一个参数传给self了。)
class Dog(object):
def __init__(self, name):
self.name = name
@staticmethod
def eat():
print("%s is eating")#因为name是个实例变量,类方法是不能访问实例变量的 d = Dog("ChenRonghua")
d.eat()

class Dog(object):
name = "我是类变量" def __init__(self, name):
self.name = name
self.__food=None @classmethod
def eat(self):
print("%s is eating" % self.name)
def __call__(self, *args, **kwargs):#构造方法:对象=类名() 而__call__ 则是:对象()
print("running call",args,kwargs) def __str__(self):
return 'obj:%s'%self.name d = Dog("ChenRonghua")
d(2,3,4,name='开发量')#__call__ 则是:对象()
print(d.__dict__)#打印的是实例属性{'name': 'ChenRonghua', '_Dog__food': None}
print(Dog.__dict__)#打印的是类的属性
print(d)#module对象想知道它是谁__str__ d.eat() #把一个类做成字典了
#属性方法
#属性方法的作用就是通过@property把一个方法变成一个静态属性 class Dog(object):
''' 类是描述狗这个对象'''
def __init__(self, name):
self.name = name @property
def eat(self):
print(" %s is eating" % self.name) d = Dog("ChenRonghua")
print (Dog.__doc__) #d.eat() #因为eat此时已经变成一个静态属性了, 不是方法了, 想调用已经不需要加()号了,直接d.eat就可以了
d.eat
#@property 的实例---航班查询
#这个status属性的值是一系列动作后才得到的结果 class fly(object):
def __init__(self,name):
self._name=name
def check_status(self):
print("%s fly status"%self._name)
return 2
@property
def fly_status(self):
status=self.check_status()
if status==0:
print ("quxiao")
elif status==1:
print("daoda")
elif status == 2:
print("ready")
else:
print("later")
d=fly("k7")
d.fly_status #-----------另一种
class fly(object):
def __init__(self,name):
self._name=name
def check_status(self):
print("%s fly status"%self._name)
return 2
def fly_status(self):
status=self.check_status()
if status==0:
print ("quxiao")
elif status==1:
print("daoda")
elif status == 2:
print("ready")
else:
print("later")
d=fly("k7")
d.fly_status()
#__doc__表示类的描述信息
class Foo:
""" 描述类信息,这是用于看片的神奇 """ def func(self):
pass print(Foo.__doc__)

#__call__对象后面加括号
#构造方法,即:对象 = 类名() ;
#__call__方法 即:对象() 或者 类()() class Foo:
def __init__(self):
print("__init__") def __call__(self, *args, **kwargs):
print('__call__') obj = Foo() # 执行 __init__ obj() # 执行 __call__
#如果一个类中定义了__str__方法,那么在打印 对象 时,默认输出该方法的返回值

class Foo:
def __str__(self):
return 'alex li'
obj = Foo()
print(obj)
#生命的起源是通过Type来实现的
def func(self):
print ("hello %s"%self.name) def __init__(self,name,age):
self.name=name
self.age=age foo=type("foo",(object,),{"talk":func,
"__init__":__init__})
f =foo("alex",32)
f.talk() print(type(foo)) #<class 'type'>
#-*- coding:utf8 -*-
class Dog():
def __init__(self,name):
self.name=name
def eat(self):
print ("%s is eating..."%self.name) d=Dog("zhangsan")
choice=input(">>:").strip()
# print (hasattr(d,choice))#>>:eat---True
# getattr(d,choice)() #zhangsan is eating...
if hasattr(d,choice):
func=getattr(d,choice)
func()
#-*- coding:utf8 -*-
def dulk(self):
print("%s is yelling.."%self.name)
class Dog():
def __init__(self,name):
self.name=name
def eat(self,food):
print ("%s is eating..."%self.name,food) d=Dog("zhangsan")
choice=input(">>:").strip()
# print (hasattr(d,choice))#>>:eat---True
# getattr(d,choice)() #zhangsan is eating...
if hasattr(d,choice):
func=getattr(d,choice)
func("lisi") #>>:eat --zhangsan is eating... lisi
#hasattr (obj,name_str)判断一个对象是否有对应的name_str字符串的
#getattr(obj,name_str)根据字符串去获取对象对应方法里的内存地址
else :
# setattr(d,choice,dulk)
# d.talk(d)
setattr(d,choice,32)
print(getattr(d,choice)) #>>:talk --32
#-*- coding:utf8 -*-
def dulk(self):
print("%s is yelling.."%self.name)
class Dog():
def __init__(self,name):
self.name=name
def eat(self,food):
print ("%s is eating..."%self.name,food) d=Dog("zhangsan")
choice=input(">>:").strip()
# print (hasattr(d,choice))#>>:eat---True
# getattr(d,choice)() #zhangsan is eating...
if hasattr(d,choice):
getattr(d,choice)
else :
# print(setattr(d,choice,None))
setattr(d,choice,dulk)
func=getattr(d,choice)
func(d)
#-*- coding:utf8 -*-
def dulk(self):
print("%s is yelling.."%self.name)
class Dog():
def __init__(self,name):
self.name=name
def eat(self,food):
print ("%s is eating..."%self.name,food) d=Dog("zhangsan")
choice=input(">>:").strip()
# print (hasattr(d,choice))#>>:eat---True
# getattr(d,choice)() #zhangsan is eating...
if hasattr(d,choice):
func=getattr(d,choice)
setattr(d ,choice,"xiaobai")
# func("lisi") #>>:eat --zhangsan is eating... lisi
#hasattr (obj,name_str)判断一个对象是否有对应的name_str字符串的
#getattr(obj,name_str)根据字符串去获取对象对应方法里的内存地址
else :
# setattr(d,choice,dulk)
# d.talk(d)
setattr(d,choice,32)
print(getattr(d,choice))
print(d.name) #>>:name----xiaobai
#setattr (obj,'y',z) is equitvalent to x.y=z 对对象添加新的属性

异常处理

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

												

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. 浅谈My SQL引擎的对比

    MySQL数 据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎,就必须重新编译MYSQL.在缺省情况下,MYSQL支持三个引擎:ISAM.MYISAM和HEAP.另外两种类型IN ...

  2. 使用 CSS 的 :before 和 :after 选择器做一个箭头样式

    对于 :before 和 :after 选择器,大家并不陌生,但是很少有人会主动去用它们.先解释下它们的定义和用法: :before 选择器在被选元素的内容前面插入内容,:after 选择器在被选元素 ...

  3. 学习OpenCV——Kalman滤波

    背景: 卡尔曼滤波是一种高效率的递归滤波器(自回归滤波器), 它能够从一系列的不完全及包含噪声的测量中,估计动态系统的状态.卡尔曼滤波的一个典型实例是从一组有限的,包含噪声的,对物体位置的观察序列(可 ...

  4. 微软bing搜索搜索源码,可以直接运行

    微软联合HackerRank一起研发了一项新功能:源代码搜索.能够直接搜索代码并且进行编译运行. 如果不做说明,这项功能看上去简直就是Visual Studio中源代码搜索插件的翻版,不过其并不需要本 ...

  5. Oracle-数据库

    Oracle 1.特点 关系型数据库 采用二维表的行使管理数据库 具有行和列  表间存在关联关系 2.安装 数据库(11g) 版本类型 32位    64位  安装类型 桌面类 本机开发 服务器类 生 ...

  6. break和continue的区别以及标签label的使用

    break表示直接跳出当前循环,break只能运用于switch--case语句以及循环之中 continue则表示跳出当次循环,继续执行下一次循环 label标签则可以选择break,或者conti ...

  7. FileInputStream and FileOutputStream

    Java FileOutputStream class Java FileOutputStream is an output stream for writing data to a file. If ...

  8. (转)flexigrid 参数说明

    本文为转载 http://simple1024.iteye.com/blog/1171090 项目用到这玩意,像样的API都是英文的,英文不好,所以经过各种搜集,flexigrid就整理了这么多用得上 ...

  9. fzu 2188 过河I

    http://acm.fzu.edu.cn/problem.php?pid=2188 过河I Time Limit:3000MS     Memory Limit:32768KB     64bit ...

  10. Python学习总结14:时间模块datetime & time & calendar (一)

    Python中的常用于处理时间主要有3个模块datetime模块.time模块和calendar模块. 一.time模块 1. 在Python中表示时间的方式 1)时间戳(timestamp):通常来 ...