Python学习DAY8

1.Python方法没有重载

在这里插入图片描述
在这里插入图片描述

class Person:
    def work(self):
        print("努力上班!")
    def work(self):
        print("努力上班,我就不")#定义同名方法,只有最后一个有效
def play_game(s):
        print("{0}在玩游戏".format(s))
def work2(s):
        print("好好工作赚钱")
Person.play=play_game#一切都是对象,函数也是对象,可以为类添加新的方法
p=Person()
p.work()
p.play()
Person.work=work2#修改旧的方法
p.work()

结果:
努力上班,我就不
<__main__.Person object at 0x000001377B06C668>在玩游戏
好好工作赚钱

进程已结束,退出代码0

2.Python的私有属性和私有方法在这里插入图片描述

class Person:
    def __init__(self,name,age):
        self.name=name
        self.__age=age#私有属性的定义方法
    def __work(self):#私有方法的定义
        print("努力工作")
        print("年龄:{0}".format(self.__age))

e=Person("lily",18)
print(e.name)
print(e._Person__age)#私有属性的访问方法
e._Person__work()#私有方法的访问方法



结果:
lily
18
努力工作
年龄:18
进程已结束,退出代码0

在这里插入图片描述
这里可以看到调用的是emp1.salary而不是 emp1.salary(),说明调用的的一个属性而不是方法

class Person():
    @property
    def salary(self):
        return 30000
emp1=Person()
print(emp1.salary)

4.在这里插入图片描述

#测试继承的使用
class Person():
    def __init__(self , name , age):
        self.name=name
        self.__age=age#私有属性


    def say_age(self):
        print('i dont know...')

class Student(Person):
    def __init__(self,name,age,score):
        Person.__init__(self,name,age)#必须显式地调用父类初始化方法,不然解释器不会去调用
        self.score=score

s=Student("lily",18,60)
s.say_age()
print(s.name)
print(s._Person__age)


结果:
i dont know...
lily
18

进程已结束,退出代码0

5.方法重写在这里插入图片描述

#测试方法的重写
class Person():
    def __init__(self , name , age):
        self.name=name
        self.__age=age#私有属性

    def say_age(self):
        print('i dont know...')

    def say_name(self):
        print("my name is {0}".format(self.name))

class Student(Person):
    def __init__(self,name,age,score):
        Person.__init__(self,name,age)#必须显式地调用父类初始化方法,不然解释器不会去调用
        self.score=score

    def say_name(self):

        '''重写了父类的方法'''
        print("please,my name is {0}".format(self.name))

s=Student("lily",18,60)
s.say_name()

结果:
plaese,my name is lily

进程已结束,退出代码0

6.dir()和mro()
在这里插入图片描述
在这里插入图片描述
上述例子运行结果:

s=Student("lily",18,60)
s.say_name()
print(dir(s))
print(Student.mro())


结果:
plaese,my name is lily
['_Person__age', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'name', 'say_age', 'say_name', 'score']
[<class '__main__.Student'>, <class '__main__.Person'>, <class 'object'>]

进程已结束,退出代码0

7.重写__str__()方法:

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


    def __str__(self):
        return "name is :{0}".format(self.name)


p=Person("lily")
print(p)

结果:
name is :lily

进程已结束,退出代码0

8.在这里插入图片描述9.在这里插入图片描述
在这里插入图片描述
此时输出:say BBB!
10.测试super()方法
在这里插入图片描述

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 0x0000015D8327C2B0>
B <__main__.B object at 0x0000015D8327C2B0>

进程已结束,退出代码0

11.多态是指同一个方法调用由于对象不同可能会产生不同的行为。
在这里插入图片描述

class A():
    def say(self):
        print("A")

class B(A):

    def say(self):
        print("B")

class C(A):

    def say(self):
        print("C")

def letter(m):
    if isinstance(m,A):
        m.say()#多态,一个方法调用,由于传进来的对象不同,输出结果不同
    else:
        print("D")

letter(C())

结果:
C

进程已结束,退出代码0

12.浅拷贝与深拷贝

在这里插入图片描述

#测试对象的浅拷贝与深拷贝
import copy
class mobilephone:
    def __init__(self,cpu,screen):
        self.cpu=cpu
        self.screen=screen
class cpu:
    def __calculate__(self):
        print("12345")
        print("cpu对象:",self)
class screen:
    def __show__(self):
        print("显示一下")
        print("screen对象:",self)

#测试变量赋值,可以发现它们其实指向同一个地址
c1=cpu()
c2=c1
print(c1)
print(c2)
#测试浅复制,发现它们不是指向同一个对象,但是子对象却是一样的
s1=screen()
m1=mobilephone(c1,s1)
m2=copy.copy(m1)
print(m1,m1.cpu,m2.screen)
print(m2,m2.cpu,m2.screen)
print()

#测试深复制,发现它们不是指向同一个对象,子对象也不一样
m3=copy.deepcopy(m1)
print(m1,m1.cpu,m2.screen)
print(m2,m3.cpu,m3.screen)


结果:
<__main__.cpu object at 0x0000023D80BFC710>
<__main__.cpu object at 0x0000023D80BFC710>
<__main__.mobilephone object at 0x0000023D80BFCB00> <__main__.cpu object at 0x0000023D80BFC710> <__main__.screen object at 0x0000023D80BFCA20>
<__main__.mobilephone object at 0x0000023D80BFCD68> <__main__.cpu object at 0x0000023D80BFC710> <__main__.screen object at 0x0000023D80BFCA20>

<__main__.mobilephone object at 0x0000023D80BFCB00> <__main__.cpu object at 0x0000023D80BFC710> <__main__.screen object at 0x0000023D80BFCA20>
<__main__.mobilephone object at 0x0000023D80BFCD68> <__main__.cpu object at 0x0000023D80BF8400> <__main__.screen object at 0x0000023D80BF8518>

进程已结束,退出代码0

13.组合与继承

在这里插入图片描述

#使用继承实现代码复用
class A():
    def say(self):
        print("AAA")
class B(A):
    pass

b=B()
b.say()

#使用组合实现代码复用
class A1():
    def say(self):
        print("BBB")
class B1(A1):
    def __init__(self,a):
        self.a=a

b1=B1(A1())
b1.a.say()

结果:
AAA
BBB

进程已结束,退出代码0

14.两种设计模式:工厂模式和单例模式在这里插入图片描述
在这里插入图片描述
结果:
在这里插入图片描述
在这里插入图片描述

#测试单例模式
class MySingleton:
    __obj = None
    __init_flag = True

    def __new__(cls,*args,**kwargs):
        if cls.__obj==None:
           cls.__obj =object.__new__(cls)
        return cls.__obj

    def __init__(self,name):
        if MySingleton.__init_flag:
            print("init...")
            self.name=name
            MySingleton.__init_flag=False

a=MySingleton("aa")
b=MySingleton("bb")
print(a)
print(b)

结果:
init...
<__main__.MySingleton object at 0x000002158A5DBFD0>
<__main__.MySingleton object at 0x000002158A5DBFD0>

进程已结束,退出代码0

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值