运维

基础知识总结归纳!


<p>[toc]</p> <h3>类(class)</h3> <p>定义了事务的属性和它可以做到的行为。</p> <h4>对象(object)</h4> <p>类的实例,系统给对象分配内存空间,不会给类分配内存空间。</p> <h5>成员变量</h5> <ul> <li>类中定义成员变量message,并赋予初始值。</li> <li>成员函数,self是对象本身引用,成员函数引用self参数获取对象信息。</li> </ul> <pre><code class="language-python">class ObjectDemo: # 类成员变量 message = "Hello, send a message." def show(self): print('func: ',self.message) if __name__ == '__main__': print('初始化值: ', ObjectDemo.message) # 修改成员变量 ObjectDemo.message = "Hello, message is changed." print('修改后值: ', ObjectDemo.message) # 实例化对象 run = ObjectDemo() run.show()</code></pre> <p>结果:</p> <pre><code>初始化值: Hello, send message. 修改后值: Hello, message is changed. func: Hello, message is changed.</code></pre> <h5>构造函数</h5> <p>创建对象时初始化对象,实例化时被python解释器自动调用。</p> <pre><code class="language-python">class ObjectDemo: def __init__(self, name = 'unset', day = ''): """ :desc: 构造函数,自动调用 """ print(name, ',', day, ': Hello, __init__') # 调用 ObjectDemo(name = 'Bohemian', singer= 'today')</code></pre> <h5>析构函数</h5> <p>销毁实例化对象,当对象没有被引用时(引用计数为0),由垃圾回收器调用<strong>del</strong>方法,进行销毁释放内存。</p> <pre><code class="language-python">class ObjectDemo: def __del__(self): print('called') if __name__ == '__main__': run = ObjectDemo() result = ObjectDemo() print("end")</code></pre> <p>返回</p> <pre><code>end called called</code></pre> <p>当插入del obj</p> <pre><code class="language-python">if __name__ == '__main__': run = ObjectDemo() result = ObjectDemo() del result print("end")</code></pre> <p>返回</p> <pre><code>called end called</code></pre> <h5>成员变量</h5> <p>成员函数可以直接使用,通过实例也可以访问到。</p> <pre><code class="language-python">class ObjectDemo: # 类成员变量 message = "Hello, I'm message." def show(self): print(self.message) def __init__(self, name = 'unset', day = ''): print(name, ",", day,": Hello, __init__") # 实例成员变量 self.name = name self.day = day def __del__(self): print('called', self.name) if __name__ == '__main__': run_2 = ObjectDemo(name = 'Bohemian', day = 'today') print('name: ', run_2.name)</code></pre> <p>返回</p> <pre><code>Bohemian , today : Hello, __init__ name: Bohemian called Bohemian</code></pre> <h5>静态函数</h5> <p>装饰器staticmethod,不需要传入self,不能直接访问实例变量,需要通过类名访问成员变量。</p> <pre><code class="language-python">class ObjectDemo: @staticmethod def printMessage(): """ :desc: 静态函数,从属于一个类 """ print("staticmethod") # 通过类名访问成员变量 print(ObjectDemo.message) if __name__ == '__main__': # 类调用 ObjectDemo.printMessage() # 类对象调用 ObjectDemo().printMessage()</code></pre> <h5>类函数</h5> <p>装饰器classmethod,参数cls, 不需要实例化,不需要self,可以来调用类的属性,类的方法,实例化对象等。</p> <pre><code class="language-python">class ObjectDemo: @classmethod def createObj(cls, name, day): """ :cls: 隐性参数,获取类信息 """ print("object create %s(%s, %s)" % (cls.__name__, name, day)) return(cls(name, day)) if __name__ == '__main__': # 类调用 ObjectDemo.createObj('Bohemian', 'today') # 类对象调用 run_3 = ObjectDemo().createObj('Bohemian', 'today')</code></pre> <h5>私有成员</h5> <p>&quot;__&quot;开头命名的的成员,类之外的代码无法访问,</p> <pre><code class="language-python">class ObjectDemo: def __init__(self, name = 'unset', day = ''): print(name, ",", time, ": Hello, __init__") # 实例成员变量 self.name = name self.day = day #私有成员 self.__name = name self.__day = day def __del__(self): print('called', self.__name) if __name__ == '__main__': try: run_4 = ObjectDemo() print(run_4.__name) except Exception as e: print("__name : ",str(e))</code></pre> <p>返回</p> <pre><code>__name end: 'ObjectDemo' object has no attribute '__name'</code></pre> <h5>代码demo</h5> <pre><code class="language-python"># -*- coding:utf-8 -*- """ @author: @file: demo_.py @time: 2022/9/25 14:38 @desc: """ class ObjectDemo: # 类成员变量 message = "Hello, send a message." def show(self): """ :desc: 成员函数,self是对象本身引用,成员函数引用self参数获取对象信息 """ print(self.message) def __init__(self, name = 'unset', day = ''): """ :desc: 构造函数,自动调用 """ print(name, ",", day, ": Hello, __init__") # 实例成员变量 self.name = name self.day = day #私有成员, 类之外的代码无法访问 self.__name = name self.__day = day @staticmethod def printMessage(): """ :desc: 静态函数,从属于一个类 """ print("staticmethod") # 通过类名访问成员变量 print(ObjectDemo.message) @classmethod def createObj(cls, name, day): """ :cls: 隐性参数,获取类信息 :desc: 类函数 """ print("object create %s(%s, %s)" % (cls.__name__, name, day)) return(cls(name, day)) def __del__(self): """ :desc: 析构函数,释放对象调用 """ # print('called', self.name) print('called', self.__name) if __name__ == '__main__': run = ObjectDemo(day= 'today') run.show() # 修改成员变量 ObjectDemo.message = "Hello, message is changed." print(ObjectDemo.message) # 传参 # run_2 = ObjectDemo(singer= 'Queen') run_2 = ObjectDemo(name = 'Bohemian', day = 'today') # run_2 = ObjectDemo('Bohemian Rhapsody') run_2.show() # print('name of day: ', run.day) print('name of run_2: ', run_2.name) # staticmethod 类调用 ObjectDemo.printMessage() # staticmethod 类对象调用 ObjectDemo().printMessage() # classmethod 类调用参数 run_3 = ObjectDemo.createObj('Bohemian', 'today') # classmethod 类对象调用 run_3 = ObjectDemo().createObj('Bohemian', 'today') # 私有成员 try: run_4 = ObjectDemo() print(run_4.__name) except Exception as e: print("私有成员__name: ",str(e))</code></pre> <h4>继承</h4> <h5>方法</h5> <p>子类会继承父类的属性和方法。</p> <pre><code class="language-python">class EmployeeObject: def __init__(self, name, id): self.name = name self.id = id def print_info(self): print('员工名字: %s, 员工id: %s' % (self.name, self.id)) class FullTimeEmployee(EmployeeObject): def print_info(self): print('fulltime') class PartTimeEmployee(EmployeeObject): def print_info(self): print('partime') # 实例化 part = PartTimeEmployee('Max', '10002') part.print_info()</code></pre> <p>实例具有name, id属性,调用print_info是父类的方法。</p> <pre><code class="language-python">class PartTimeEmployee(EmployeeObject): def print_info(self): print('partime') def print_info(self): print('兼职员工名字: %s, 员工id: %s' % (self.name, self.id))</code></pre> <p>子类有自己的print_info方法,就会调用自己的。优先看所属的类有没有该方法,没有的话,往上找同名的父类方法。</p> <pre><code class="language-python">class FullTimeEmployee(EmployeeObject): def __init__(self, name, id, monthly_salary): super().__init__(name, id) self.monthly_salary = monthly_salary</code></pre> <p>创建子类实例时,子类的构造函数优先调用。导致实例只有monthly_salary方法。用super方法,会返回当前类的父类。</p> <h5>代码demo</h5> <pre><code class="language-python"># -*- coding:utf-8 -*- """ @author: @file: employee.py @time: 2022/9/26 22:16 @desc: """ class EmployeeObject: def __init__(self, name, id): self.name = name self.id = id def print_info(self): print('员工名字: %s, 员工id: %s' % (self.name, self.id)) class FullTimeEmployee(EmployeeObject): def __init__(self, name, id, monthly_salary): super().__init__(name, id) self.monthly_salary = monthly_salary def calculate_monthly_pay(self): return self.monthly_salary class PartTimeEmployee(EmployeeObject): def __init__(self, name, id, daily_salary, work_days): super().__init__(name, id) self.daily_salary = daily_salary self.work_days = work_days def calculate_monthly_pay(self): monthly_salary = int(self.work_days) * int(self.daily_salary) return monthly_salary if __name__ == '__main__': # 实例化 Tom = FullTimeEmployee('Tom', '10001', 4000) Max = PartTimeEmployee('Max', '10002', 200, 15) # 调用父类方法 Tom.print_info() Max.print_info() # 调用子类方法 print(Tom.calculate_monthly_pay()) print(Max.calculate_monthly_pay()) </code></pre>

页面列表

ITEM_HTML