zoukankan      html  css  js  c++  java
  • 我的Python分析成长之路7

    一、编程范式:

           1.函数式编程   def

          2.面向过程编程   (Procedural Programming)

            基本设计思路就是程序一开始是要着手解决一个大的问题,然后把一个大问题分解成很多个小问题或子过程,这些子过程再执行的过程再继        续分解直到小问题足够简单到可以在一个小步骤范围内解决。

          3.面向对象编程 (object oriented programming)

             OOP编程是利用“类”和“对象”来创建各种模型来实现对真实世界的描述,使用面向对象编程的原因一方面是因为它可以使程序的维护和扩         展变得更简单,并且可以大大提高程序开发效率 ,另外,基于面向对象的程序可以使它人更加容易理解你的代码逻                   辑,从而使团队开发变得更从容。

          

     1 #面向对象编程
     2 class Dog():
     3     '''一次小狗的简单模拟类'''
     4     def __init__(self,name,age):
     5         self.name = name
     6         self.age = age
     7     def eating(self,food):
     8         '''模拟小狗吃东西'''
     9         print("%s is eating %s"%(self.name,food))
    10     def running(self):
    11         '''模拟小狗跑步'''
    12         print("%s is running "%self.name)
    13     def main(self):
    14         self.eating("apple")
    15         self.running()
    16 if __name__ == "__main__":
    17     dog1 = Dog("xiaoming",3)
    18     dog1.main()
    View Code

          1.方法__init__():初始化函数,每当实例化类时,python就会自动运行该函数。调用该函数时,会自动传递实参self,它是一个指向实例本身的引用,让实例能访问类中的       属性和方法.__init__()函数中需要的参数,就是实例化类时需要传递的参数

          2. 其他方法:通过实例来调用该方法 

          3.类属性和实例属性 调用时用.调用  类方法也通过.来调用

          

          

          

          

     1 class Car():
     2     name = "Ryoma"
     3     '''一次汽车的简单模拟类'''
     4     def __init__(self,make,model,year):
     5         '''汽车的属性'''
     6         self.make = make
     7         self.model = model
     8         self.year = year
     9         self.odometer_ing = 0
    10     def get_describe(self):
    11         '''车的描述'''
    12         print(str(self.make)+' '+str(self.model)+' '+str(self.year))
    13     def read_odometer(self):
    14         '''读里程表'''
    15         print("this car has "+str(self.odometer_ing)+' '+"miles ")
    16     def update_odometer(self,miles):
    17         '''更新里程表的数'''
    18         self.odometer_ing += miles
    19 car = Car("AUDI",'A6',1995)
    20 car.update_odometer(100)
    21 print(car.odometer_ing)
    22 car.read_odometer()
    View Code

    二、类的三大特性

            1.封装

                封装也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或对象操作,对不可信的进行信息隐藏

            2.继承

                继承是指这样一种能力,它可以使用现有类的所有功能,并在无需重新编写原来类的情况下对这些功能进行扩展。

                通过继承创建的类为“子类”或“派生类”。被继承的类称为“父类”或“基类”。

                继承实现的方式主要有两种:实现继承、接口继承。实现继承指的是使用基类的属性或方法而无需额外的编码能力。接口继承指使用属性和方法的名称,            但是子类必须提供实现的能力(即重构父类的方法)

                

     1 class Car():
     2     def __init__(self,make,model,year,fill_gas=100):
     3         '''汽车的属性'''
     4         self.make = make
     5         self.model = model
     6         self.year = year
     7         self.odometer_ing = 0
     8         self.fill_gas = 100
     9     def get_describe(self):
    10         '''车的描述'''
    11         print(str(self.make)+' '+str(self.model)+' '+str(self.year))
    12     def read_odometer(self):
    13         '''读里程表'''
    14         print("this car has "+str(self.odometer_ing)+' '+"miles ")
    15     def update_odometer(self,miles):
    16         '''更新里程表的数'''
    17         self.odometer_ing += miles
    18     def fill_gas_tank(self):
    19         print("this var has %s "%self.fill_gas)
    20 class ElectricCar(Car):
    21     '''创建一个电动车的模拟类'''
    22     def __init__(self,make,model,year):
    23         super(ElectricCar,self).__init__(make,model,year)
    24         self.battery = Battery()
    25     def fill_gas_tank(self):
    26         print("this car has no fill_gas")
    27 class Battery():
    28     '''一次对电池的简单模拟'''
    29     def __init__(self,battery_size=70):
    30         self.battery_size = battery_size
    31     def describe_battery(self):
    32         print("this battery size is %s"%self.battery_size)
    33 ecar = ElectricCar('tesla','s',2000)
    34 ecar.battery.describe_battery()
    View Code
     1 class Company():
     2     def __init__(self,name,addr,found_year):
     3         self.name = name
     4         self.addr = addr
     5         self.found_year = found_year
     6     def tell(self):
     7         print("公司名为%s,地址是%s,成立于%s"%(self.name,self.addr,self.found_year))
     8     def roll_member(self):
     9         print("33[31;1m%s正在招人才,大家可以投简历33[0m"%self.name)
    10 class CompanyMember():
    11     members =0
    12     def __init__(self,name,age):
    13         self.name = name
    14         self.age = age
    15     def roll_member(self):
    16         CompanyMember.members += 1
    17         print("33[41;1m %s 已被录用,现在公司人数为%s0[0m"%(self.name,self.members))
    18 class Leader(CompanyMember):
    19     def __init__(self,name,age,salary):
    20         super(Leader,self).__init__(name,age)
    21         self.salary = salary
    22         self.roll_member()
    23     def job(self):
    24         print("%s的工作是CEO"%self.name)
    25     def tell_info(self):
    26         print("my name is %s,age is %s"%(self.name,self.age))
    27 class Putonh(CompanyMember):
    28     def __init__(self,name,age):
    29        super(Putonh,self).__init__(name,age)
    30        self.roll_member()
    31     def tell_info(self):
    32         print("my name is %s,age is %s"%(self.name,self.age))
    33 if __name__ == "__main__":
    34     company = Company("Ryoma Fintech","hangzhou",2020)
    35     company.tell()
    36     company.roll_member()
    37     led = Leader('zqq',24,200000)
    38     led.tell_info()
    39     led.job()
    40     pu = Putonh('a',18)
    41     pu.tell_info()
    View Code

             继承主要有两种继承方式:1.在python2.7经典类中是深度优先继承 2.在2.7新式类中是广度优先继承3.在3.x中都是广度优先

     1 class A(object):
     2     def __init__(self):
     3         print("in the A")
     4 class B(A):
     5     def __init__(self):
     6         print("in the B")
     7 class C(A):
     8     def __init__(self):
     9         print("in the C")
    10 class D(B,C):
    11     # def __init__(self):
    12     #     print("in the D")
    13     pass
    14 D()
    View Code

            3.多态 

                   允许你将父对象设置成为和一个或多个子对象相同的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运行,为了实现接口            重用。

     1 class Animal():
     2     def __init__(self,name):
     3         self.name = name
     4     def talk(self):
     5         raise NotImplementedError("Subclass must implement abstract method")
     6 
     7 class Cat(Animal):
     8     def talk(self):
     9         print("喵喵喵")
    10 class Dog(Animal):
    11     def talk(self):
    12         print("WOw")
    13 def func(obj):
    14     obj.talk()
    15 if __name__ == '__main__':
    16    c1 = Cat('dd')
    17    d1 = Dog("xx")
    18    func(c1)
    19    func(d1)               #一个接口,多种实现
    View Code
     1 class Animal():
     2     def __init__(self,name):
     3         self.name = name
     4     def talk(self):
     5         raise NotImplementedError("Subclass must implement abstract method")
     6     @staticmethod
     7     def animal_talk(obj):
     8         obj.talk()
     9 class Cat(Animal):
    10     def talk(self):
    11         print("喵喵喵")
    12 class Dog(Animal):
    13     def talk(self):
    14         print("WOw")
    15 
    16 if __name__ == '__main__':
    17    c1 = Cat('dd')
    18    d1 = Dog("xx")
    19    Animal.animal_talk(c1)
    20    Animal.animal_talk(d1)
    View Code

     三、静态方法 @staticmethod 实际上让方法变成与类没关系,变成类下的一个方法,不要传self

        

    四、类方法 @classmethod 只能调用类属性,不能访问实例属性

        

    五、静态方法@property 1.将方法变为静态属性,调用时直接实例+方法名,不加括号  

         

    六、其他特殊成员方法

      1.__doc__ 表示类的描述信息

      2.__module__表示当前操作的对象在哪个模块

      3.__class__表示当前操作的类是哪个

      4.__init__构造函数,通过类创建对象时,自动触发

      5.__del__析构函数,当对象在内存中释放的时候,自动触发

      6.__call__对象后面加(),触发执行,或类()()

      7.__dict__查看类或对象的所有属性,类.__dict__只能查看类中的属性,对象.__dict__只能查看对象中的属性。

      8.__getitem__ /__setitem__/__delitem__用于索引操作,分别对应获得,设置,删除操作

      

     1 def tell(self):
     2     print("my name is %s"%self.name)
     3 class Foo(object):
     4     def __init__(self):
     5         self.name = 'zz'
     6     def func(self):
     7         return 'func'
     8 foo = Foo()
     9 print(hasattr(foo,'name'))   #判断是否有名字属性
    10 print(hasattr(foo,'func'))   #判断是否有func方法
    11 print(getattr(foo,'name'))  #获得name属性的值
    12 print(getattr(foo,'func'))  #获得func对应的函数地址
    13 setattr(foo,"age",18)    #设置成员函数
    14 setattr(foo,"tell",tell)   
    15 print(getattr(foo,'age'))
    16 fuc = getattr(foo,"tell")
    17 fuc(foo)
    18 delattr(foo,"name")  #删除成员函数
    View Code

     

  • 相关阅读:
    P3834 【模板】可持久化线段树 (静态主席树)
    P3834 【模板】可持久化线段树 (静态主席树)
    2019 南昌网络赛 I. Max answer
    Linux从入门到精通——系统的进程
    Linux从入门到精通——文件权限
    Linux从入门到精通——命令行使用技巧
    Linux从入门到精通——Linux系统的文件及其管理
    Linux从入门到精通——vim及管理输入输出
    Linux从入门到精通——用户管理
    thiny mission 2021 10 15
  • 原文地址:https://www.cnblogs.com/Ezhizen/p/10257544.html
Copyright © 2011-2022 走看看