クラスにおけるリロード演算,copy,データの格納(day 16まとめ)

3293 ワード

1,演算子対応の操作
pythonのすべてのデータ型は、データがオブジェクトです.すべての演算子に対応する操作は,本質的にデータ型に対応する魔法法を呼び出す.(各演算子は固定された魔法の方法に対応します)
class Student(object):
    def __init__(self, name, age=0, score=0):
        self.name = name
        self.age = age
        self.score = score

    def __repr__(self):
        return str(self.__dict__)

    #        
    # self +  other = return    
    def __add__(self, other):
        return self.age + other.age

    #        
    def __mul__(self, other):
        return self.score * other

    # >
    def __gt__(self, other):
        return self.score > other.score

    # <
    # def __lt__(self, other):
    #     return self.score < other.score

    #   : >  stu2)
print(stu1 < stu2)

2.浅いコピーと深いコピー(面接ポイント!)
コピー原理:コピーされたオブジェクトをコピーし、新しいデータを生成し、新しいデータのアドレスを返します.
a.浅いコピー
  • リストまたは辞書のcopyメソッドは、浅いコピー、スライスも浅いコピー
  • である.
  • copy.copy(オブジェクト)-指定したオブジェクトをコピーし、サブオブジェクトをコピーしない新しいオブジェクトを生成します.
    b.コピーコピーコピーcopy.deepcopy(オブジェクト)-指定したオブジェクトをコピーし、新しいオブジェクトを生成します.このオブジェクトに他のオブジェクトがある場合、サブオブジェクトもコピーされます.
    3.データの格納
    1メモリオープン
    pythonの変数はスタック区間に格納され、オブジェクトはスタック区間に格納されます.
    変数を宣言するか、変数に値を割り当てるかは、メモリ(スタック)に格納データを開き、データアドレスを変数に保存します.しかし、数字と文字列は特殊で、数字や文字列で変数に値を割り当てる場合、直接スペースを開いてデータを保存するのではなく、メモリでこのデータを検出する前に保存したかどうかを確認し、保存していなければ前回保存したデータを直接保存することができず、保存していなければ新しい空間を開いてデータを保存することができます.
    2.メモリの解放
    1)参照カウントpython各オブジェクトには、現在のオブジェクトの参照数を保存するための参照カウントという属性があります.
    2)pythonにおけるゴミ回収メカニズムで1つのオブジェクトが破棄されたか否かを判断するには,そのオブジェクトの参照カウントがゼロであるか否かを見,ゼロであると破棄される.
    from sys import getrefcount##sysモジュールのgetrefcountメソッドは、取得時に呼び出されるため、取得時に参照カウントを取得するために使用されます.
    4.socketネットワークプログラミング
    1.サーバ側
    from socket import *
    
    """
                  ;     ,         、      
    """
    # 1.       (     )
    """
    family -   ip    , AF_INET(ipv4), AF_INET6(ipv6)
    type -         , SOCK_STREAM(TCP), SOCK_DGRAM(UDP)
    
    """
    server = socket(family=AF_INET, type=SOCK_STREAM)
    
    # 2.  ip     (          )
    """
    bind((ip  ,   ))
    
    ip   -    ,      ip  
        - int,                   。0-65535, 0-1024     ,    。
                            
    """
    addr = ('10.7.185.82', 8085)
    server.bind(addr)
    
    # 3.      (   ,      )
    server.listen(512)
    
    # 4.        
    while True:
        print('    ....')
        # 5.    (   )
        #          ,    ,                。。。
        connect, addr = server.accept()
        print(addr, '    !')
    
        while True:
            # 6.    (    )
            """
            recv(bufsize)  - bufsize,                  ,     
                                       
            """
            # print('     ')
            re_data = connect.recv(1024)
            print(re_data.decode(encoding='utf-8'))
    
            # print('     ')
    
            # 7.     (     )
            message = input('>>>')
            connect.send(message.encode())
    
        # 8.    (   )
        connect.close()
    
    

    2.カスタマーサービス
    from socket import *
    
    # 1.       
    client = socket()
    
    # 2.     
    client.connect(('10.7.185.82', 8085))
    
    while True:
        # 3.    
        message = input('   :')
        client.send(message.encode())
    
        # 4.    
        re_data = client.recv(1024)
        print(re_data.decode(encoding='utf-8'))