一、高级语法
1、静态方法:@staticmethod
只是类下面的一个方法,并非可以实例化方法,实际上是访问不了类中的任何属性和方法
2、类方法:@classmethod
只能访问类变量,无法访问实例变量
3、属性方法:把一个方法变成一个静态属性
@property,然后需要将方法set一下才可以使用,例如
@方法名.setter
静态属性用del 静态方法无法删除
删除静态属性,需要再建立一个属性方法,使用@方法名.deleter
示例:
class dog(object):
n=100
def __init__(self,name):
self.name=name
#静态方法
@staticmethod
def eat(self):
print(“%s is a dog”%self.name)
#类方法
@classmethod
def wangwang(self):
print(“%s is a animal”%self.n)
#属性方法
@property
def hehe(self):
print(“%s is a animal %s”%(self.name,self.food))
@hehe.setter
def hehe(self,food):
print(“%s 时代氛围”%food)
self.food=food
@hehe.deleter
def hehe(self):
print(“food is deleted”)
二、类的特殊成员方法
__doc__:描述信息
__module__ :表示当前操作的对象在哪个模块
__class__ :表示当前操作的对象的类是什么
__call__:对象后面加括号,触发执行,构造方法的执行是由创建对象触发的,即:对象 = 类名() ;而对于 __call__ 方法的执行是由对象后加括号触发的,即:对象() 或者 类()()
__dict__:
类.__dict__ ,以字典方式打印出类里所有方法信息
实例化.__dict__ ,以字典方式打印出实例方法及属性
__str__:该方法调用的属性,如果一个类中定义了__str__方法,那么在打印 对象 时,默认输出该方法的返回值
__getitem__等方法,是无法随便删除字典等属性的,需代码处理
__new__先走此方法,此方法用来实例化,然后再处理init等其他方法
return object.__new__(cls) 继承父类__new__地址
__metaclass__:类中有一个属性 __metaclass__,其用来表示该类由 谁 来实例化创建,所以,我们可以为 __metaclass__ 设置一个type类的派生类,从而查看 类 创建的过程
call 创建new,new创建init
反射:
getattr(obj,string)将字符串反射成方法,供调用
hasattr(obj,string)判断obj里是否有对应的namestring的方法,判断字符串中是否有对应的方法映射
setattr(obj,string,func) 通过字符串,给变成字符串的方法设置新的func属性或方法
delattr(obj,string)删除方法或属性
示例代码:
def bulk(self):
print(“i am bulk %s”%self.name)
class Dog(object):
def __init__(self,name):
self.name=name
d=Dog(“niuhanyang”)
choice=input(“>>>:”).strip()
if hasattr(d,choice): #判断类中是否存在字符串的方法,存在返回True
#输入类中的属性,例如name,将ss赋给name
setattr(d,choice,”ss”)
print(d.name)
#输入信息,将将字符串反射成方法名,再调用方法
func=getattr(d,choice)
func()
else:
setattr(d,choice,bulk)
ss=getattr(d,choice)
ss(d)
print(type(ss))
三、异常处理
try :
代码
except Exception as e: #Exception 抓住所有错误
print(“%s”,e)
finally #不管有没有错都执行
raise 触发自己的异常