python之路——第三块(面向对象进阶)
静态方法
@staticmethod ------> 截断跟类的关联,变成一个函数方法
但是需要类实例化后才能调用这个方法,可以用于导入其他模块的功能,构成工具包
class blackperson(person):
def __init__(self,name,job,love,speed,animals_obj):
super(blackperson, self).__init__(name,job,love)
self.animals = animals_obj
# person.__init__(self,name,job,love)
self.speed = speed
def run(self):
print(self.name,"run %s"%self.speed)
@staticmethod #静态方法
def work(name):
print("%s is working now"%name)
d2 = blackperson("dzk","st","zm","200",1)
d2.work("alex")
类方法
@classmethod
只能访问类变量,不能访问实例变量
class blackperson(person):
def __init__(self,name,job,love,speed,animals_obj):
super(blackperson, self).__init__(name,job,love)
self.animals = animals_obj
# person.__init__(self,name,job,love)
self.speed = speed
@classmethod
def run(self):
print(self.name,"run %s"%self.speed)
@staticmethod #静态方法
def work(name):
print("%s is working now"%name)
d2 = blackperson("dzk","st","zm","200",1)
d2.run()
加上类方法后,调用会报错,但定义了两个类变量,就能正常执行。类方法不能调用构造函数的属性,只能调用公有属性。
name = "alex"
speed = 1
属性方法
@property
把一个方法变成静态属性,不能直接传参数,可以用@xxx.setter重新写一个方法用来对变成静态属性后赋值操作。而且不能del删除,只能用@xxx.delter来删除
class person(object):
def __init__(self,name,job,love): #构造函数,构造方式,初始化方法
self.name = name
self.job = job
self.love = love
@property
def say(self):
print("您好,",self.name)
def game(self):
print(self.name,"is playing game")
def marry(self):
print("%s married with %s"%(self.name,self.love))
d1 = person("dzk","st","lyf")
d1.say
调用的时候如果加括号会报错,因为是已经变成了静态属性,所以不用加括号,直接调用。
_doc_ 打印类的描述信息,即类的注释信息
_module_ 输出对象调用的模块
_dic_ 以字典形式打印类下的信息
_del_ 析构方法,当对象在内存中被释放时,自动触发执行。
反射 ------>hasattr(),getattr(),setattr(),delattr() 四个方法
hasattr(d,choice) , d是实例后的对象,choice是方法的代词,用于查询类中是否有choice这个方法
class person(object):
def __init__(self,name,job,love): #构造函数,构造方式,初始化方法
self.name = name
self.job = job
self.love = love
def say(self):
a = 1
print("您好,",self.name)
print(a)
def game(self):
print(self.name,"is playing game")
def marry(self):
print("%s married with %s"%(self.name,self.love))
p1 = person("dzk","st","lyf")
choice = input(">>>>>")
hasattr(p1,choice)
print(hasattr(p1,choice))
如果输入的是say,返回True
getattr(d,choice) 如果方法存在,调用choice这个方法
class person(object):
def __init__(self,name,job,love): #构造函数,构造方式,初始化方法
self.name = name
self.job = job
self.love = love
def say(self):
a = 1
print("您好,",self.name)
print(a)
def game(self):
print(self.name,"is playing game")
def marry(self):
print("%s married with %s"%(self.name,self.love))
p1 = person("dzk","st","lyf")
choice = input(">>>>>")
hasattr(p1,choice)
print(hasattr(p1,choice))
getattr(p1,choice)()
调用的时候,直接在gerattr()后再加一个括号即可,如果方法不存在,报错
setattr(x,y,z) x:对象,y:字符串 , z:方法 动态的将z方法装配进类中,可添加静态属性
setattr(p1,"age","22") setattr(p1,"math",lambda num: num + 1) # print(getattr(p1,choice)) print(getattr(p1,choice)(2))
第一个是设置一个静态属性,age = 22
第二个是设置一个新的方法,并用getattr()调用

浙公网安备 33010602011771号