python基础知识(八)面向对象----(四)

(八)面向对象----(四)

目录

(八)面向对象----(四)

         8.1反射 

              getattr() hasattr() setattr() delattr()

8.2类的内置的方法



8.1反射

getattr()

getattr() 函数用于返回一个对象属性值

getattr(object, name[, default])
#name是字符串,如对象内没有字符串属性,就报错
class Teacher:
    dic = {'查看学生信息':'show_student','查看讲师信息':'show_teacher'}
    def __init__(self,name):
        self.name = name

    def show_student(self):
        print('show_student')

    def show_teacher(self):
        print('show_teacher')

    @classmethod  #这个方法可直接被类调用,不依托任何对象---类方法
    def func(cls):
        print('hahaha')

print(getattr(Teacher,'dic')) #类属性(静态属性)
ret = getattr(Teacher,'func') #类方法
ret()


alex = Teacher(alex)
print(getattr(alex,'name'))       #对象属性
ret1 = getattr(alex,'show_teacher') #对象方法
ret1()

'''
{'查看学生信息': 'show_student', '查看讲师信息': 'show_teacher'}
hahaha
alex
show_teacher
'''

反射自己模块的方法和属性

def f():
    print('aa')
year = 2019
import sys

# 反射自己模块中的变量
print(getattr(sys.modules['__main__'],'year'))

# 反射自己模块中的函数
getattr(sys.modules['__main__'],'f')()

'''
2019
aa
'''
变量名 = input('>>>')
print(getattr(sys.modules[__name__],变量名))

反射函数有参数

import time
print(time.strftime('%Y-%m-%d %H:%M:S'))
print(getattr(time,'strftime')('%Y-%m-%d %H:%M:S'))

hasattr()

hasattr() 函数用于判断对象是否包含对应的属性

class Teacher:
    dic = {'查看学生信息':'show_student','查看讲师信息':'show_teacher'}
if hasattr(Teacher,'dic'):
    print(11111)
#11111
#如果对象有该属性返回 True,否则返回 False

输入字典的key就可直接调用对应的方法

class Teacher:
    dic = {'查看学生信息':'show_student','查看讲师信息':'show_teacher'}
    def show_student(self):
        print('show_student')
    def show_teacher(self):
        print('show_teacher')

alex = Teacher()
for k in Teacher.dic:
    print(k)
key = input('输入需求 :')
if hasattr(alex,Teacher.dic[key]):
    func = getattr(alex,Teacher.dic[key])
    func()

setattr() delattr()

#setattr  设置修改变量
class A:
    pass
a = A()
setattr(a,'name','aa')
setattr(A,'name','bb')
print(A.name)
print(a.name)
'''
aa
bb
'''

# delattr 删除一个变量
delattr(a,'name')
print(a.name)
'''
aa
'''

8.2类的内置的方法

相关链接:https://blog.csdn.net/zeroooorez/article/details/89914815

 __str__() __repr__()

item:__getitem__() __setitem__() __delitem__()

__del__()

__new__()

__call__()

with和__enter__,__exit__

__len__()

__hash__()

__eq__()

猜你喜欢

转载自blog.csdn.net/zeroooorez/article/details/89883928