面向对象内置方法以及反射

面向对象的内置函数之str

# __str__

class Student():
    school = 'SH'

    # 调用类的时候触发
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def tell(self):
        print('name: %s, age: %s' % (self.name, self.age))

    # 打印对象的时候,自动触发的函数
    # 返回值只能是字符串
    def __str__(self):
        return 'name:%s' % self.name
        # return 123

s = Student('JUNJIE', 18)
print(s) # name:JUNJIE

面向对象的内置函数之del

# __del__ 
"""
一个对象的产生有构造方法和析构方法
	构造方法:实例化就会触发构造方法,__init__,将对象构造出来
	析构方法:当一个对象用完想要删除时,就会触发析构方法,那什么是析构方法 ?
"""
class Student():
    school = 'SH'

    # 调用类的时候触发
    def __init__(self, name, age):
        self.name = name
        self.age = age

    # 手动执行del
    # 程序执行完毕触发
    def __del__(self):
        print('__del__')
        # self.f.close()


stu = Student('junjie', 18)
# del stu.name
print('end=》》》》》')
print(stu.__dict__) # {'name': 'junjie', 'age': 18}

"""
使用__del__之后
"""

class Student():
    school = 'SH'

    # 调用类的时候触发
    def __init__(self, name, age):
        self.name = name
        self.age = age

    # 手动执行del
    # 程序执行完毕触发
    def __del__(self):
        print('__del__')
        # self.f.close()


stu = Student('junjie', 18)
del stu.name
print('end=》》》》》')
print(stu.__dict__) # {'age': 18}
"""
也可以删除对象
	删除对象后依旧会运行
	def __del__(self):
        print('__del__')
        # self.f.close()
"""

面向对象的内置函数之enter / exit

class Open:
    def __init__(self,name):
        self.name=name

    def __enter__(self):
        print('出现with语句,对象的__enter__被触发,有返回值则赋值给as声明的变量')
        # return self
    def __exit__(self, exc_type, exc_val, exc_tb):
        print('with中代码块执行完毕时执行我啊')


s = Open('junjie')
with Open('a.txt') as f:
    print('=====>执行代码块')

面向对象的内置函数之call

class Foo:

    def __init__(self):
        pass
    
    def __call__(self, *args, **kwargs):

        print('__call__')


obj = Foo() # 执行 __init__
obj()       # 执行 __call__

反射

# 对象通过字符串来操作属性

class Student():
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def func(self):
        print('from func')


# 1.
# getattr
stu = Student('junjie', 18)
print(getattr(stu, 'name1', None))  # 去对象stu找name1 有则返回值 如果没有就返回None
stu.func()
print(getattr(stu, 'func'))
getattr(stu, 'func')()

# 2.
# setattr
setattr(stu, 'x', 11)  # 在stu对象增加一个属性x = 11
print(stu.__dict__)

# 3.
# hasattr
print(hasattr(stu, 'name'))  # 看stu对象有没有属性name  如果没有返回False 反则返回True

# 4.
# delattr
delattr(stu, 'name')  # 删除stu对象里的name属性
print(stu.__dict__)

异常

1. 什么是异常?
	异常就是错误发生的信号,如果不对该信号做处理,那么异常之后的代码都不会执行
    
    异常的种类:
    	1. 语法错误
        	print(123
        2. 逻辑错误
             # 逻辑错误尽量写到完美
			a = [1, 2, 3]
             a[5]
2. 为什么要用异常
	增强代码的健壮性
                  
3. 怎么用异常?
        try:
              被监测代码
        except 异常的类型:
                  pass
          except 异常的类型:
                  pass
          except 异常的类型:
                  pass
        except Exception as e:
                  pass
        else:
              # 当被监测代码没有发生异常的时候,触发的
                  pass
        finally:
               不管被监测的代码有没有出错,都执行   
posted @ 2021-12-07 22:27  谢俊杰  阅读(25)  评论(0编辑  收藏  举报