時光很短暫

导航

 

内置方法

1. __init__  # 在实例化的时候自动调用该方法

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

    # 打印或者输出对象的时候,自动调用的方法
    def __str__(self):
        return 'name:%s' % self.name
        # return 123  # 返回结果是字符串,不能是整型


stu = Student('tom', 19)
# print(stu)

__del__
class Student():
    def __init__(self, name, age):
        self.name = name
        self.age = age
        # self.f = open('a.txt')

    # 1. del 删除对象的时候自动触发
    # 2. 当整个程序执行完毕在调用方法
    def __del__(self):
        print('触发了')
        # self.f.close()


stu = Student('tom', 19)
del stu
print(123)

# __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中代码块执行完毕时执行我啊')



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


with open('a.txt', 'r', encoding='utf-8') as f:
    f.read()
    
    
class Foo:
    x = 1

    def __init__(self, y):
        self.y = y
        # pass

    def __getattr__(self, item):
        print('----> from getattr:你找的属性不存在')

    # 当设置的属性不存在的时候触发
    def __setattr__(self, key, value):
        print('----> from setattr')
        print(key, value)
        # self.a = 200
        # self.key=value #这就无限递归了,你好好想想
        self.__dict__[key]=value #应该使用它

    def __delattr__(self, item):
        print('----> from delattr')
        # del self.item #无限递归了
        # self.__dict__.pop(item)


# __setattr__添加/修改属性会触发它的执行
f1 = Foo(10)
# print(f1.y)
# f1.a = 200
del f1.a

class Foo:

    def __init__(self):
        pass
    
    # 对象加括号
    def __call__(self, *args, **kwargs):
        print('__call__')


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

反射

# 通过字符串操作属性
# 掌握4个方法即可
1. getattr()
2. setattr()
3. hasattr()
4. delattr()

class Student():
    school = 'SH'
    def func(self):
        print('from func')

stu=Student()
# print(stu."school")

# print(getattr(stu, 'school', 123))
# print(getattr(stu, 'func'))
# getattr(stu, 'func')()


# 2. setattr()
# setattr(stu, 'x', 100)
# print(stu.__dict__)

# 3. hasattr
# print(hasattr(stu, 'school'))

# 4. delattr
# stu.x = 1
# delattr(Student, 'school')
# print(Student.__dict__)

异常

1. 什么是异常?
异常就是错误发生的信号,如果不对该信号做处理,程序就会终止运行

2. 为什么要用异常?
    为了增加代码的健壮性
3. 如何使用异常?
    try:
        pass
    except 异常的类型:
        pass
     except 异常的类型:
        pass
    except 异常的类型:
        pass
    elseprint('当没有发生异常的时候执行')
    finally:
        print('不管有没有异常都会执行')

        
# 主动抛出异常

class Animal():
    def speak(self):
        raise Exception('必须实现speak方法')


class Student(Animal):
    def speak(self):
        pass


stu = Student()
stu.speak()

# 自定义异常
class MyException(BaseException):
    def __init__(self, msg):
        self.msg = msg

    def __str__(self):
        return self.msg

raise MyException('出问题啦')

 

posted on 2022-02-17 15:58  時光很短暫  阅读(38)  评论(0)    收藏  举报