首页 > 其他分享 >组合 反射 抛出异常

组合 反射 抛出异常

时间:2023-10-10 22:24:12浏览次数:40  
标签:__ 反射 name 组合 course 抛出 self stu age

1. 组合

组合:把另外一个类的对象属性赋值给当前对象的属性

首先要明白 什么是什么的区别 为什么要继承父类
比如三个类  老师类  学生类 课程类;   虽然老师和学生有课程  但是老师和学生是课程吗? 还是老师和同学是课程
"""
    is a 的关系 代表的是 继承的关系
    和什么有什么的关系 就是组合
"""
所以不想继承 又想用到其他类中的属性 就需要 创建超级对象 来 获取其他类中的属性和方法 
class Student:
    pass

class Teacher:
    pass

class cuosce:
    pass


案例如下:
"""
1. 老师类 : 初始化属性有  name,gender,age ,evol.salary
2. 学生类 : 初始化属性有  name , gender age uid class_name
3. 课程类: name gender age course price day 
4. 把类中冗余的代码写一个类 来继承
"""
class Tar_Stu:
    def __init__(self,name,age,gender):
        self.name = name
        self.age = age
        self.gender = gender

class Teacher(Tar_Stu):

    def __init__(self,name,age,gender,evol,salary,course):
        super().__init__(name,age,gender)
        self.evol = evol
        self.salary = salary
        self.course = course

    def ter_course(self):
        print('%s 老师有 %s 课 ' % (self.name,self.course))

class Student(Tar_Stu):

    def __init__(self, name, age, gender,uid,class_name,course):
        super().__init__(name, age, gender)
        self.uid = uid
        self.class_name = class_name
        self.course = course

    def stu_course(self):
        print('%s 同学有 %s 课 ' % (self.name,self.course))

class Course:
    def __init__(self,course,price,day):
        self.course = course
        self.price = price
        self.day = day

    def course_time(self):
        print('%s 课程 %s 钱 %s 天' % (self.course,self.price,self.day))


terchar = Teacher('huang',28,'male','10级',15000,'python')  # 老师对象
stu = Student('lu',88,'male',88,'九五班','python')         # 学生对象

python = Course('python',22000,'180')                  # 课程对象
linux = Course('linux',25000,200)                       # 课程对象

terchar.tar_course = python             # python 对象会赋值给 tar_course
terchar.tar_course.course_time()        # 调用的时候 调用的对象.被赋值的名字.方法即可 完成了不用继承也可以用其他类

stu.stu_course = linux
stu.stu_course.course_time()

stu.stu_course = [python,linux]     # 可以用列表来装多个 赋值对象

for i in stu.stu_course:            # 调用的时候 for 循环即可
    i.course_time()

2. 反射

"""反射:就是通过字符串的形式来操作对象的属性"""

四个内置函数:
    getattr: 获取属性 ##### 用的最多
    setattr:设置属性
    hasattr:判断是否有某个属性
    delattr:删除

class Student():
    school = 'SH'

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

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

    def index(self):
        print('from index')
stu = Student('kevin', 20)

# 1. 获取属性
"""当你查询的属性不存在的时候,如果给了第三个参数,就返回第三个参数"""
"""如果你给了第三个参数,查询的属性也存在,那就直接返回属性对应的值,默认值就没用了"""
# res=getattr(stu, 'school1', 666) # SH 666

res=getattr(stu, 'func1', stu.index) # 获取类中的方法 第一个参数是 对象 第二的参数是 类中的方法 没有找到的情况下 就返回第三个默认值
print(res())

## 设置
setattr(stu, 'x', 666) # 类中有这个属性就修改 没有就增加
print(stu.__dict__)

### hasattr 判断有没有这个属性 返回布尔值
print(hasattr(stu, 'func'))
if hasattr(stu, 'func'):
    getattr(stu, 'func')()
else:
    ...

## delattr 删除属性 没有就报错 有就删除
delattr(stu, 'name1')
del stu.name
print(stu.__dict__)

 

标签:__,反射,name,组合,course,抛出,self,stu,age
From: https://www.cnblogs.com/lchengshao/p/17755892.html

相关文章

  • 组合,反射,魔术方法
    组合,反射,魔术方法组合反射魔术方法组合什么是组合? 组合就是,一个对象拥有一个属性,该属性的值是另外一个对象."""什么场景下使用继承?什么场景下使用组合?"""继承一般情况用在:什么是什么的情况is组合一般用在:什么有什么的情况hasclassFoo:def__init__(sel......
  • 组合,反射,魔术方法
    组合,反射,魔术方法组合反射魔术方法组合什么是组合? 组合就是,一个对象拥有一个属性,该属性的值是另外一个对象."""什么场景下使用继承?什么场景下使用组合?"""继承一般情况用在:什么是什么的情况is组合一般用在:什么有什么的情况hasclassFoo:def__init__(self......
  • Python 反射
    反射通过字符串映射或修改程序运行时的状态、属性、方法,有以下4个方法。hasattr(obj,name_str)#判断一个对象里是否有对应的name_str字符串的方法映射getattr(obj,name_str)#根据字符串去获取obj对象里的对应的方法的内存地址setattr(obj,"y",z),isequivalent(相当于)(to)......
  • 互联网大厂+公务员组合的家庭应该是很多人羡慕的组合吧?
    夫妻二人一个编制内,一个编制外。先说说我老公的收入。我老公是四级警长,每月到手一万多点。年终补贴大概25K左右。年底加上十三个月工资和每年休假的钱,每月有个14K+,全年合计存到手有个16W多。我,之前是阿里P7,年薪税后50W左右。去年被优化,目前入职一家中型互联网公司,年薪没涨,依然50W......
  • Composite 组合模式简介与 C# 示例【结构型3】【设计模式来了_8】
    〇、简介1、什么是组合设计模式?一句话解释:  针对树形结构的任意节点,都实现了同一接口,他们具有相同的操作,可以通过某一操作来遍历全部节点。组合模式通过使用树形结构来组合对象,用来表示部分以及整体层次。组合模式属于结构型模式,多用于递归。官方意图描述:将对象组合成树形......
  • 【愚公系列】2023年10月 二十三种设计模式(八)-组合模式(Composite Pattern)
    ......
  • 组合数学习笔记
    一些式子\[(1+x)^\alpha=\sum_{i=0}\binom{\alpha}{i}x^i\\\binomnk=\fracnk\binom{n-1}{k-1}\\\binomnk=\binomn{k-1}+\binom{n-1}{k-1}\\\binomnm=(-1)^m\binom{m-n-1}m\\\binomnkk^{\underlinem}=\binom{n-m}{k-m}n^{\under......
  • 反射简介(Reflecyion)
    反射: 优点:可以实现动态创建对象和编译,灵活性好缺点:对性能有影响,反射基本是一个解释操作,我们可以告诉JVM,我们希望做什么并且它满足我们的需求,这些操作总是会慢于直接执行相同的操作。反射主要的API:Class ......
  • [异常处理]rabbitMQ 消费端异常进入死循环-消费消息时候抛出错误,控制台一直刷
    消费端一直在循环消费消>报错->消费.问题点也能想的来,因为默认是自动应答,异常了相当于是没有应答,然后就一直异常重新抛回队列进行投递.解决方案:第一种方法:对可能发生异常的部分try、catch;只要事先将问题catch住,就证明消费端已经将该问题消费掉,然后该消息就不存在于队列中......
  • 记一次itflow 反射型XSS漏洞挖掘
    引言水一篇文章,单纯记录一下开源项目漏洞挖掘历程,本文介绍了一次对某开源项目的反射型XSS漏洞的挖掘,此开源项目是一个信息技术管理平台,XSS插入点为expenses.php接口中的dtf参数。漏洞挖掘GET请求接口点,dtf参数进行XSS防御,但没有完全过滤敏感字符和函数,造成了XSS漏洞,该参数......