クラスとオブジェクト、クラスの継承、クラスの派生、クラスの組合せ、マルチステート

5717 ワード

6.18-6.19自己総括
オブジェクト向けプログラミング
1.クラスとオブジェクト
pythonにはまずクラスがあり、オブジェクト、クラス、オブジェクトがあります.クラスはオブジェクトの同じ特徴と同じ方法をまとめてから、クラスに基づいてオブジェクトを生成します.このオブジェクトはクラスの特徴と方法を持っています.
1.クラスの名前
class   :#                      
    name = a #  
    def __init__(self): self #               ,            , __init__             
        pass
    def func():#func   .              
        pass
    
   =   ()

2.オブジェクトの検索順序
#        ,    ,      ,        
# .      
class a:
    name = 'sb'
    def __init__(self,name):
        self.name = name
        
b = a('2b')
print(b.name)
#   2b
#      
class a:
    name = 'sb'
    def __init__(self,name):
        self.xx = name
b = a('2b')
print(b.name)
#   sb        
                 

3.生成したオブジェクトの値変更
 .               ,                    

2.クラスの継承
1.親、子
継承は新しいクラスを作成する方法で、新しいクラスを子クラス、継承されたクラスを親クラスと呼びます.
2.書き方の継承
class fu:
    print('from fu')
class son(fu): #   ()                ,             
    pass
a = son()
print(a)
#from fu

3.検索順
#        ,    ,      ,            ,        ,    .       
#      

3.クラスの派生
親と子の基礎の上で、子の再親の基礎の上でもっと多くの特徴が必要な時私達が導入した派生
1.親が1人しかいない場合
class fu:
    def __init__(self,name,age,money):
        self.name = name
        self.age = age
        self.money = money

#            
#     
class son(fu):
    def __init__(self,name,age,money,car):
        super().__init__(name,age,money)
        self.car = car
son_1 =son(1,2,3,4)
print(son_1.car)
#     
'''
            
super()          ,                  (       )
super().__init__(   self  )
super      super(     ,self), python2      , python3      super()
'''
class son(fu):
    def __init__(self,name,age,money,car):
        super(son,self).__init__(name,age,money)
        self.car = car
son_1 =son(1,2,3,4)
print(son_1.car)

2.複数の親がいる場合
class FuOne:
    def __init__(self,name,age):
        self.name = name
        self.age = age
class FuTwo:
    def __init__(self,money):
        self.money = money

class Son(FuOne,FuTwo): #             
    def __init__(self,name,age,money):
    # super(Son, self).__init__(naem,age)   FuOne.__init__(FuOne,name,age)       
    #super     ,           ,           ,           
        FuOne.__init__(FuOne,name,age)
        FuTwo.__init__(FuTwo,money)
son = Son(1,2,3)
print(son.money)

#    
class FuOne:
    print('123')
    def __init__(self,name,age):
        self.name = name
        self.age = age
class FuTwo:
    print('123')
    def __init__(self,money):
        self.money = money

class Son(FuOne,FuTwo): #             ,         ,              
    pass
'''
123
123
'''

4.クラスの組み合わせ
主にクラスのメソッドによって組み合わせられ,メソッド内にはクラス名が伝達される.
#   :     
#        
class People:
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender

    def eat(self):
        print(f'{self.name}    ')


class Student(People):
    def __init__(self, student_id, name, gender):
        self.student_id = student_id
        super(Student, self).__init__(name, gender)

    def choose_course(self, course):  # python  
        self.course = course  #     #           ,    /  /   。
        print(f'{self.name}  {course.name}  ')


class Teacher(People):
    def __init__(self, level, name, gender):
        self.level = level
        super(Teacher, self).__init__(name, gender)

    def scored(self, student, course, score):
        print(f'  {self.name} {student.name}  {course.name}  {score}')


class Course:
    def __init__(self, name, price):
        self.name = name
        self.price = price


class Admin(People):
    def create_course(self, name, price):
        course = Course(name, price)
        print(f'   {self.name}     {name}')
        return course


#   
# python = Course('Python', '8888')
# linux = Course('Linux', '6666')

#   
zhubajie = Student('01', 'zhubajie', 'male')
sunwukong = Student('02', 'sunwukong', 'male')

#   
nick = Teacher('1', 'nick', 'male')
tank = Teacher('2', 'tank', 'female')

#    
egon = Admin('egon', 'male')

#     

# 1.     
python = egon.create_course('python', '8888')
print(python.__dict__)
linux = egon.create_course('linux', '6666')
print(linux.__dict__)

# 2.       
zhubajie.choose_course(python)


# 3.        
nick.scored(zhubajie,python,'0')

5.マルチステート
1.定義
多態とは、一つの事物に多様な形態があることを指し、(一つの抽象類には複数のサブクラスがあるため、多態の概念は継承に依存する)
  • シーケンスデータ型には、文字列、リスト、メタグループ
  • の様々な形態があります.
  • 動物には様々な形態がある:人、犬、豚
  • 2.使用例
    import abc
    
    
    class Animal(metaclass=abc.ABCMeta):  #      :  
        @abc.abstractmethod  #                   ,  @abc.abstractmethod                  
        def talk(self):
            raise AttributeError('          ')
    
    
    class People(Animal):  #        : 
        def talk(self):
            print('say hello')
    
    
    class Dog(Animal):  #        : 
        def talk(self):
            print('say wangwang')
    
    
    class Pig(Animal):  #        : 
        def talk(self):
            print('say aoao')
    
    
    peo2 = People()
    pig2 = Pig()
    d2 = Dog()
    
    peo2.talk()
    pig2.talk()
    d2.talk()

    3.注意事項
      :           
    
                            ,                    。                  :             ,                 (   )。    ,                    。    ,      ,             ,        。