2021-11-13特殊方法与运算符的重载,特殊属性

方法解析顺序

class A:
    def aa(self):
        return
    def say(self):
        print("我是AAA")
class B:
    def bb(self):
        return
    def say(self):
        print("我是BBB")
class C(A,B):
    def cc(self):
        return

c=C()
c.say()    #运行结束我是AAA
class A:
    def aa(self):
        return
    def say(self):
        print("我是AAA")
class B:
    def bb(self):
        return
    def say(self):
        print("我是BBB")
class C(B,A):           #改变这里
    def cc(self):
        return

c=C()
c.say()    #运行结束我是BBB

super用来获取父类定义

class A:
    def say(self):
        print("A!!!:",self)
class B(A):
    def say(self):
        A.say(self)
        print("B!!!:",self)

B().say()
#A: <__main__.B object at 0x00000194A9418400>
#B: <__main__.B object at 0x00000194A9418400>

和下面的写法是一致的

class A:
    def say(self):
        print("A!!!:",self)
class B(A):
    def say(self):
        super().say()       #这一步的改变
        print("B!!!:",self)

B().say()
#A: <__main__.B object at 0x00000194A9418400>
#B: <__main__.B object at 0x00000194A9418400>

运算符的重载

#运算符的重载
class Person:
    def __init__(self,name):
        self.name=name

    def __add__(self,othername):   #运算符的重载,这里采用的是加法
        if isinstance(othername,Person):
            return "{0}加{1}".format(self.name,othername.name)
        else:
            return "出错啦"
q1=Person("小李")
q2=Person("小王")

m=q1+q2
print(m)            #输出结果为“小李加小王”
class A:
    pass

class B:
    pass

class C(A,B):
    def __init__(self,nn):
        self.nn = nn
    def cc(self):
       print("我是CCC")

ddd=C(3)
print(dir(ddd))
print(ddd.__dict__)     #输出 一串属性字典  {'nn': 3}
print(ddd.__class__)    #输出 所属的类 <class '__main__.C'>
print(C.__bases__)      #输出 类的父辈 元组形式展现  (<class '__main__.A'>, <class '__main__.B'>)
print(C.__base__)
print(C.__mro__)        #输出 层次结构  (<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>)
print(A.__subclasses__()) #子类列表 [<class '__main__.C'>]

对象的深浅拷贝

#测试对象的引用赋值、浅拷贝、深拷贝
import copy     #引入
class MobilePhone:
    def __init__(self,cpu,screen):
        self.cpu = cpu
        self.screen = screen
class CPU:
    def calculate(self):
        pass
class Screen:
    def show(self):
        pass
#测试变量赋值
c1=CPU()
c2=c1
print(c1)    #<__main__.CPU object at 0x000001FED1AA1C10>
print(c2)    #<__main__.CPU object at 0x000001FED1AA1C10>
#测试浅拷贝
s1=Screen()
m1=MobilePhone(c1,s1)
m2=copy.copy(m1)
print(m1)    #<__main__.MobilePhone object at 0x00000296CC016640>
print(m2)    #<__main__.MobilePhone object at 0x00000296CC12B0A0>
print(m1,m1.cpu,m1.screen) 
print(m2,m2.cpu,m2.screen) 
#<__main__.MobilePhone object at 0x0000016830F06640> <__main__.CPU object at 0x0000016831441C10> <__main__.Screen object at 0x0000016831441FD0>
#<__main__.MobilePhone object at 0x000001683144B0A0> <__main__.CPU object at 0x0000016831441C10> <__main__.Screen object at 0x0000016831441FD0>
#可以看出的是表同但是里不同
print("#############")
#测试深拷贝
m3=copy.deepcopy(m1)
print(m1,m1.cpu,m1.screen) 
print(m3,m3.cpu,m3.screen)
#<__main__.MobilePhone object at 0x0000016830F06640> <__main__.CPU object at 0x0000016831441C10> <__main__.Screen object at 0x0000016831441FD0>
#<__main__.MobilePhone object at 0x0000016831494F10> <__main__.CPU object at 0x00000168315C9D60> <__main__.Screen object at 0x00000168315C9D90>
#可以看出里外都不一样
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值