19.5.7笔记and作业

该博客记录了面向对象编程的三大特性——封装、继承、多态,还介绍了重载、魔术方法如__del__、__call__等,对比了__new__和__init__的区别,阐述单例模式、==和is的区别等,最后布置了关于魔术方法的作业。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

笔记
面向对象的三大特性,封装,继承,多态
封装

class A():
    __a=100
    def __init__(self,name,age):
        self.name=name
        self.__age=age
    def dayin(self):
        print(self.name,self.__age,A.__a)
zs=A('张三',19)
zs.dayin()###内部调用,可以使用
print(zs.__age)#不能调用,私有化封装

继承

class Shuiguo():
    def __init__(self,name,jiage):
        self.name=name
        self.jiage=jiage
    def dayin(self):
        print(self.name,self.jiage)
class Xigua(Shuiguo):
    def __init__(self,name,jiage,chandi,pingzhong):
        super().__init__(name,jiage)
        self.chandi=chandi
        self.pingzhong=pingzhong
    def showSelf(self):
        super().dayin()
        print(self.chandi,self.pingzhong)
xg=Xigua('西瓜',20,'新疆','甜瓜')
xg.showSelf()

多态

class Dog():
    def jiao(self):
        print('汪汪')
class Cat():
    def jiao(self):
        print('喵喵')
def jiao(x):
    x.jiao()
d=Dog()
c=Cat()
jiao(d)
jiao(c)

重载,override

class A():
    def func(self):
        print('哈哈')
class B(A):
    def func(self):##子类与父类拥有同名函数,子类函数将主函数覆盖
        super().func()
        print('嘿嘿')
zs=B()
zs.func()

魔术方法
__del__方法

class A():
    count=0
    def __init__(self,name):
        self.name=name
        A.count+=1
    def __del__(self):
        A.count-=1
        print('删除了',self.name,'还剩',self.count)
zs=A('张三')
ls=A('李四')
del zs
del ls

__call__方法

class A():
    count=0
    def __init__(self,name):
        self.name=name
        A.count+=1
    def __call__(self,x):
        print('我被调用了',x)
zs=A('张三')
zs.__call__(1)

class Feibo():

    def __init__(self):
        pass
    def __call__(self,n):
        a,b=1,1
        lb=[]
        if n==1:
            lb.append(1)
        elif n==2:
            lb.append(1)
            lb.append(1)
        else:
            x=1
            while x<=n:
                lb.append(a)
                a,b=b,a+b
                x+=1
            return lb
a=Feibo()
print(a(5))

__repr__方法

class Stu():
        def __init__(self,name,age):
            self.name=name
            self.age=age
        def __str__(self):
            return 'str我叫{},今年{}'.format(self.name,self.age)
        def __repr__(self):
            return 'repr姓名{},年龄{}'.format(self.name,self.age)
    zs=Stu('张三',19)
    x='%s'%(zs)##调用str
    y='%r'%(zs)##调用repr,当str没有的时候,默认调用repr,相当于是str的备胎
    print(x)
    print(y)

hastter(对象,‘属性’),判断对象调用的类中,是否含有这个属性,返回True或者False

   class A():
        count=0
        def __init__(self,name):
            self.name=name
    zs=A('张三')

 print(hasattr(zs,'name'))#True
 print(hasattr(zs,'count'))#True
 print(hasattr(zs,'age'))#False
zs.age=18##添加了age这个属性
print(zs.age)
print(hasattr(zs,'age'))

eg2:

class Stu():
    count=0
    def __init__(self,name):
        self.name=name
if not hasattr(Stu,'tax'):
    print('没有')
    Stu.tax=100
print(Stu.tax)

__new__和__init__的区别,__new__是造车,__init__是装饰车

> class Stu():
>     def __new__(cls, *args, **kwargs):
>         print('我在new',cls)##cls是Stu类
>     def __init__(self,name):
>         print('我在init')
>         self.name=name 
zs=Stu('张三')

单例模式

class Stu():
    def __new__(cls, *args, **kwargs):
        if not hasattr(cls,'inst'):
            cls.inst=object.__new__(cls)#cls指的是Stu这个类,object是没有父类,默认是基类
        return cls.inst
    def __init__(self,name):
        self.name=name
a=Stu('张三')##返回相同的inst,第一个name返回的是张三
b=Stu('李四')##返回相同的inst,李四将原来的张三覆盖,name相当于在inst中修改
print(a==b)###True
print(a is b)##True
print(id(a))
print(id(b))
print(a.name)##李四
print(b.name)##李四

==和is的区别,is是指id相同,==只是指内容相同

a=[1,2,23]
b=[1,2,23]
print(a==b)##True
print(id(a))
print(id(b))
print(a is b)##False

#__equal__方法

class A():
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def __eq__(self, other):
        if self.name==other.name and self.age==other.age:
            print('年龄和名字相等')
            return True
        else:
            return False
a=A('张三',19)
b=A('李四',20)
c=A('张三',19)
print(a==b)
print(a==c)##True
print(a is b)##False,只是年龄和名字相等

eg:

class A():
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def __eq__(self, other):
        print(self.__dict__)
        return self.__dict__==other.__dict__
a=A('张三',19)
b=A('李四',20)
c=A('张三',19)
lb=[]
if a not in lb:
    lb.append(a)
if b not in lb:
    lb.append(b)
if c not in lb:
    lb.append(c)
print(lb)

hash()函数

class Stu():
    def __init__(self,name,age):
        self.name=name
    def __eq__(self, other):
        return  self.__dict__==other.__dict__
    def __hash__(self):
        return hash(self.name)
a=Stu('张三',19)
b=Stu('李四',20)
c=Stu('张三',19)
d={a,b,c}
print(a)
print(b)
print(c)
print(d)

issubclass(子类,父类),判断函数是不是另一函数的子类,#isinstance判断c是不是A的实例

#gatattr方法的使用(获取对象,属性)

class Teacher():
    dic={'name':'hehe','age':19}
    def __init__(self,name,age):
        self.name=name
        self.age=age
    @classmethod
    def func1(cls):
        print('呵呵')
    def func2(self):
        print('嘎嘎')
a=Teacher('张三',10)
d=getattr(Teacher,'dic')#获取dic,获取类属性的时候,(填类,‘属性’)
print(d)
e=getattr(a,'name')##获取张三,获取非类属性(a,'属性')
print(e)
f=getattr(a,'func1')##获取呵呵
f()
g=getattr(a,'func2')##获取嘎嘎
g()

#setattr()方法

class A():
    pass
setattr(A,'count',100)
print(A.count)
a=A()
setattr(a,'count',200)
print(a.count)

delattr的用法,delatter(删除对象,‘删除对象的属性’)

class Teacher():
    Tax=100
    def __init__(self,name,age):
        self.name=name
        self.age=age
a=Teacher('张三',19)
delattr(Teacher,'Tax')#删除Teacher的Tax
delattr(a,'name')##删除a的name
print(a.age)
b=Teacher('李四',19)
print(b.name)

作业
1.魔术方法 eq 方法练习

class Myint(int):
    def __eq__(self, other):
        if self%6==0 and self%2==0:
            return True
        else:
            return False
no1=Myint(6)
no2=Myint(12)
result=no1==no2
print(result)
  1. 魔术方法 hash 和 __eq__练习
    设计二维坐标类Point,比较2个坐标是否相等?
class Point(object):
    def __init__(self,x,y):
        self.x=x
        self.y=y
    def __hash__(self):
        return hash(self.x)
    def __eq__(self, other):
        return self.x==other.x and self.y==other.y
p1=Point(1,2)
p2=Point(1,2)
print(hash(p1))
print(hash(p2))
print(p1 is p2)
print(p1==p2)
内容概要:该PPT详细介绍了企业架构设计的方法论,涵盖业务架构、数据架构、应用架构和技术架构四大核心模块。首先分析了企业架构现状,包括业务、数据、应用和技术四大架构的内容和关系,明确了企业架构设计的重要性。接着,阐述了新版企业架构总体框架(CSG-EAF 2.0)的形成过程,强调其融合了传统架构设计(TOGAF)和领域驱动设计(DDD)的优势,以适应数字化转型需求。业务架构部分通过梳理企业级和专业级价值流,细化业务能力、流程和对象,确保业务战略的有效落地。数据架构部分则遵循五大原则,确保数据的准确、一致和高效使用。应用架构方面,提出了分层解耦和服务化的设计原则,以提高灵活性和响应速度。最后,技术架构部分围绕技术框架、组件、平台和部署节点进行了详细设计,确保技术架构的稳定性和扩展性。 适合人群:适用于具有一定企业架构设计经验的IT架构师、项目经理和业务分析师,特别是那些希望深入了解如何将企业架构设计与数字化转型相结合的专业人士。 使用场景及目标:①帮助企业和组织梳理业务流程,优化业务能力,实现战略目标;②指导数据管理和应用开发,确保数据的一致性和应用的高效性;③为技术选型和系统部署提供科学依据,确保技术架构的稳定性和扩展性。 阅读建议:此资源内容详尽,涵盖企业架构设计的各个方面。建议读者在学习过程中,结合实际案例进行理解和实践,重点关注各架构模块之间的关联和协同,以便更好地应用于实际工作中。
资 源 简 介 独立分量分析(Independent Component Analysis,简称ICA)是近二十年来逐渐发展起来的一种盲信号分离方法。它是一种统计方法,其目的是从由传感器收集到的混合信号中分离相互独立的源信号,使得这些分离出来的源信号之间尽可能独立。它在语音识别、电信和医学信号处理等信号处理方面有着广泛的应用,目前已成为盲信号处理,人工神经网络等研究领域中的一个研究热点。本文简要的阐述了ICA的发展、应用和现状,详细地论述了ICA的原理及实现过程,系统地介绍了目前几种主要ICA算法以及它们之间的内在联系, 详 情 说 明 独立分量分析(Independent Component Analysis,简称ICA)是近二十年来逐渐发展起来的一种盲信号分离方法。它是一种统计方法,其目的是从由传感器收集到的混合信号中分离相互独立的源信号,使得这些分离出来的源信号之间尽可能独立。它在语音识别、电信和医学信号处理等信号处理方面有着广泛的应用,目前已成为盲信号处理,人工神经网络等研究领域中的一个研究热点。 本文简要的阐述了ICA的发展、应用和现状,详细地论述了ICA的原理及实现过程,系统地介绍了目前几种主要ICA算法以及它们之间的内在联系,在此基础上重点分析了一种快速ICA实现算法一FastICA。物质的非线性荧光谱信号可以看成是由多个相互独立的源信号组合成的混合信号,而这些独立的源信号可以看成是光谱的特征信号。为了更好的了解光谱信号的特征,本文利用独立分量分析的思想和方法,提出了利用FastICA算法提取光谱信号的特征的方案,并进行了详细的仿真实验。 此外,我们还进行了进一步的研究,探索了其他可能的ICA应用领域,如音乐信号处理、图像处理以及金融数据分析等。通过在这些领域中的实验和应用,我们发现ICA在提取信号特征、降噪和信号分离等方面具有广泛的潜力和应用前景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值