6.Python基礎学習ノートday 6-対象

65176 ワード

6.Python基礎学習ノートday 6-対象
一、クラスとオブジェクト
'''
 :             
  :     ,           ,           ,
               

       :             ,          。
1.       ,         
2.               str,list,         ,
              。

  :
          
  /      

      
  /  /      
'''

'''
    :
class   ():
      

class:  python   class       
  :          【     】
()          (object)
  :        ,   。
'''

'''
      :
   :          ,        
         
   :          ,         
            
'''



二、構造関数、構造関数及びself
'''
    
def __init__(self):
    pass
       ,                  。
        。
               。
        ,         self  。【self          】

             :
   .   
   .   (    )

'''


class Person():

    def __init__(self,name,sex,age,height,weight):
        # print(name,sex,age,height,weight)
        self.name = name
        self.sex = sex
        self.age = age
        self.height = height
        self.weight = weight


    def eat(self):
        print("eat",self)
        print("  ")

    def sleep(self):
        print("%s  "%self.name)

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


if __name__ == '__main__':
    per = Person("lili","girl",18,160,100)
    print(per.name)
    print(per.age)
    print(per.height)
    per.sleep()
    
'''
    :
       
def __del__(self):
    pass
               ,              。
         (    ):
1.          
2.      (del    )
'''
import time

class Person():

    def __init__(self,name):
        self.name = name
        print("        ")

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

    def __del__(self):
        print("        。。。")


if __name__ == '__main__':
    per = Person("lili")
    per.say()
    del per
    # while True:pass
    time.sleep(10)  

'''
1.self    ?
          【      】
2.self      ?
self                  ,  self          ,
          。
3.self    ?
self    ,                 ,         ,       
         。
'''


class Person():

    def __init__(self,name):
        self.name = name
        print("        ")

    def say(per,self):
        print(self)
        print("hello %s"%(per))


if __name__ == '__main__':
    per = Person("lili")
    print(Person)
    print(per)
    per.say("  ")
    

三、メンバー変数とクラス変数
'''
   :
     ,             ,        【      】
                 ,           ,         
          。
      :
  .   
  :              ,           。

    :
        ,      self              ,        。

           :
1.      
2.      
       【         】
            【             】
3.          
            ,              
4.        ,                   ,
        ,        ,       
5.               ,          【        】,
               ,         。
【                  】

'''
class Person():

    name = "lili"
    age = 18
    height = 160
    print("   ",id(name))  #     35431568
    def __init__(self,name="  ",age=20,sex="girl"):
        self.name = name
        self.age = age
        self.sex = sex


if __name__ == '__main__':
    per = Person()
    print(per.height)  # 160
    per.height = 165
    print(per.height)  # 165
    
    per2 = Person()
    print(per2.height)  # 160
    
    Person.height = 170
    
    per3 = Person()
    print(per3.height)  # 170
    print(per.height)  # 165
    print(per.name)  #   
    print(Person.name)  # lili


四、属性と方法を動的に追加する
'''
     ,         ,          ,          
           ,               。
 python ,      __slots__                   。
  :__slots__ =()         ,                  
           。          。
'''


class Person():

    __slots__ = ("name","age","eat")

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

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


class Student:

    __slots__ = ("name","age","sex","stuid","classid","eat","study")

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

    def sleep(self):
        print("  ...")


def eat():
    print("  ")


if __name__ == '__main__':
    stu = Student("  ",20)
    print(stu.name)
    stu.eat = eat
    stu.eat()
    # stu.height = 180
    # print(stu.height)
    # per = Person("lili")
    # print(per.name)
    # per.age = 20
    # print(per.age)
    # # per.age = 18
    # # print(per.age)
    # per.eat = eat
    # per.eat()

五、メンバーメソッドとクラスメソッド
'''
     /       :
1.    
                         ,      ,       
self,                    ,            ,   
            self,         。
           ,                。

2.   
             ,          ,           ,
                  @classmethod        。
     ,              cls,     ,          
                 ,       。
                   ,              ,
          。

3.    
         ,       。           @staticmethod
     ,                ,              。
'''

from datetime import datetime


class Person():
    classname = "python1904"

    @classmethod
    def getclass(cls):
        print("cls",cls)
        print("    %s"%cls.classname)

    def eat(self):
        print("  ...")

    @staticmethod
    def welcome():
        print('''
            *************************
            *             *
            *************************
            ''')


if __name__ == '__main__':
    

    print(datetime.now())
    # dt = datetime(2018,8,18,8,8,8)
    # print(dt.now())
    per = Person()
    per.eat()
    per.getclass()
    Person.getclass()
    print(per)
    print(Person)
    # per.welcome()
    # Person.welcome()
    # Person.eat()
    
 '''
    ,   ,        :
    :
         self【  】/        ,            。

   :
          self/【    】/    ,          ,
                。

    :
             ,         ,         ,
                 。
'''

六、パッケージ、継承とマルチステート
'''
         :
  ,      
  :
     :              。
     :                    ,         
           ,                。
     :        
     :        ,        

                    
   :
@property  :              。
 @property   getter  , getter           
    ,@property           ,          
@  .setter    ,        setter        。
  :              。
'''

from datetime import datetime


class Father():

    def __init__(self,name,age,money):
        self.name = name
        self._age = age
        self.__money = money

    @property
    def money(self):
        return self.__money

    @money.setter
    def money(self,mon):
        if mon < 10000000:
            print("    ")
        else:
            self.__money = mon
        

if __name__ == '__main__':
    father = Father("   ",56,100000000)
    print(father.name)
    print(father.money)
    father.money = 20000000
    print(father.money)
    print(father._age)
    # print(father.getMoney())
    # father.setMoney(20000000)
    # print(father.getMoney())
    # print(father.__money)
    # father.__money -= 100000
    # print(father.__money)
    
'''
                               
           _  __   ,          .__   
      ,         ._  __        ,      。
        ,                     。
'''


class Father():

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

    @property
    def money(self):
        return self.__money

    @money.setter
    def money(self, money):
        if money < 0:
            print("    ,    !!")
        else:
            self.__money += money

if __name__ == '__main__':
    fa = Father("   ",56,10000000)
    print(fa.money)
    print(fa._Father__money)
    fa.money = 100
    print(fa.money)   
    
'''
__foo__        ,         ,             。
__foo        ,    ,    ,        
_foo        ,     ,        ,                。
'''


'''
  :
  :                      ,           
               。
                /  /  
          /   
                 。
  :               ,      object ,    ,
object        。
'''

'''
 python               。
   :                      。
  :
class   (  ):
      
  :         ,    object ,object      。

     :
                     ,                   。

             ,         __init__  ,    init   
                  (      ),           init  
super().__init__(    )

            【      init     】,              
init   ,           。


           ,        ,              
    。
'''

class Animal(object):

    def __init__(self,name,pinzhong,sex,color):
        self.name = name
        self.pinzhong = pinzhong
        self.__sex = sex
        self.color = color
        print("            ")

    @property
    def sex(self):
        return self.__sex

    @sex.setter
    def sex(self,sex):
        self.__sex = sex

    def eat(self):
        print("  ...")

    def sleep(self):
        print("  ")


class Cat(Animal):

    def catchmouse(self):
        print("   ...")

    def mai(self):
        print("  ...")


class Dog(Animal):
    def kanmen(self):
        print("  ...")

    def faner(self):
        print("  ...")


if __name__ == '__main__':

    # cat = Cat("  ","  ","  ","  ")
    # print(cat.name)
    # print(cat.pinzhong)
    # print(cat.color)
    # print(cat.sex)
    # cat.sleep()
    # cat.catchmouse()
    # cat.mai()

    # Ani = Animal("  ","  ","  ","  ")
    # Ani.mai()
    dog = Dog("  ","  ","  ","  ")
    dog.eat()
    dog.kanmen()
    dog.faner()
    
'''
   :
                     。

        ,               ,          
                。
                     ,              
  。
                 ,                 。

class   (  1,  2,...):
      

  :()         。

  :      
   
  :name sex  money
  :              
   
  :name sex facevalue
  :              
'''

class Father():

    def __init__(self,name,sex,money):
        self.name = name
        self.sex = sex
        self.money = money
        print("           ")

    def makemoney(self):
        print("     ...")

    def dapai(self):
        print("     ...")

    def smoke(self):
        print("    ...")

    def drink(self):
        print("    ...")


class Mother():
    def __init__(self,name,sex,facevalue):
        self.name = name
        self.sex = sex
        self.facevalue = facevalue
        print("           。。。")

    def spendmoney(self):
        print("     ....")

    def cooking(self):
        print("      ...")

    def xiyifu(self):
        print("      ...")

    def damajiang(self):
        print("     ...")

    def dapai(self):
        print("     ...")


class Child(Mother,Father):
    def __init__(self,name,sex,money,facevalue):
        Mother.__init__(self,name,sex,facevalue)
        Father.__init__(self,name,sex,money)


if __name__ == '__main__':
    child = Child("  ","boy",100000,99)
    print(child)
    print(child.name)
    print(child.sex)
    print(child.money)
    child.cooking()
    child.damajiang()
    child.makemoney()
    child.spendmoney()
    child.dapai()
    print(child.facevalue)
    
 '''
  :
                 ,         。
  : , ,  
  :   ,  ,  
'''


'''
 python         ,  python            。
    :      ,     ,     ,            。
           ,         。

isinstance(obj,type)
  :              。
                      ,    True,    False。

dir(obj)
  :                ,        。
'''


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

    @staticmethod
    def run(ani):
        print("%s ..."%ani.name)


class Cat(Animal):
    pass


class Dog(Animal):
    pass


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


if __name__ == '__main__':
    cat = Cat("Tom")
    Animal.run(cat)  # Tom ...
    dog = Dog("jerry")
    Animal.run(dog)  # jerry ...
    per = Person("  ")
    Animal.run(per)  #    ...
    print(isinstance(dog,Dog))  # True
    print(isinstance(dog,Animal))  # True
    print(isinstance(per,Animal))  # False
    print(isinstance(per,(Animal,Person)))  # True
    print(dir(cat))


七、関数書き換えと演算子の再ロード
'''
    
          ,          ,              
         __str__  ,   print()  str()        
     。  __str__                  。

        __repr__  ,     __str__     ,      
__str__ = __repr__
'''
from datetime import datetime


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

    # def __str__(self):
    #     return self.name

    def __repr__(self):
        return "%s-%s"%(self.name,self.age)

    __str__ = __repr__


if __name__ == '__main__':
    print(datetime.now())  # 2019-06-21 20:49:11.558019
    per = Person("lili",19)
    print(per)  # lili-19
    
    
'''
     
'''    
class Person():
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def __str__(self):
        return "%s-%d"%(self.name,self.age)

    def __add__(self, other):
        return Person(self.name,self.age + other.age)


if __name__ == '__main__':
    list1 = [1,3,4]
    list2 = ["hello","good"]
    # list
    print(list1+list2)  # [1, 3, 4, 'hello', 'good']
    num1 = 12
    num2 = 22
    print(num1+num2)  # 34
    per = Person("lili",18)
    per2 = Person("  ",19)
    per3 = Person("  ",19)
    print(per+per2+per3)  # lili-56
    
'''
       ,          
'''
class mydict(dict):

    def __add__(self, other):
        dict1 = self.copy()
        for k,v in other.items():
            dict1[k] = v
        return dict1
    


if __name__ == '__main__':
    mydict1 = mydict({1:"hello",2:"nice"})
    mydict2 = mydict({3:"good",4:"great"})
    print(mydict1+mydict2)
    print(mydict1)
    print(mydict2)