2022年 11月 5日

python高端语法_python高级语法

一、高级语法

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 触发自己的异常