zoukankan      html  css  js  c++  java
  • python类的学习笔记1

    一、封装

      作为面向对象编程的三大要素之首的封装,其实就是将相关的数据和操作方式整合成一个更加便于定义和应用的单元罢了。

      数据:成员变量

      操作方法:成员方法

      类的格式:1)class  2)className 3)() 4):                 //1是类的关键字,2是希望的类名称,3是小括号,表明类,如果有父类,将父类名称放入,否则就留空,4是定义类的必备符号

            缩进:  成员变量罗列

            缩进:  成员函数定义

            空行

      函数的定义格式:1)def  2)funName 3)() 4):             //1是函数定义的关键字,2是希望的函数名称,3是小括号,表明方法,如果有参数,将参数名称放入,参数间用逗号分割,否则就留空,4是定义函数的必备符号

      用类生成对象就是类的实例化

      类中可定义一个类似C++的构造函数样的转换器:

      1)固定的名称函数 __init__

      2)函数的参数第一个必须为self

    1 class Book():
    2     title = 'picture'
    3     price = 1680
    4 
    5     def printPrice(self, num):
    6         print(self.title + ' : ', num, self.price * num)
    7 
    8 book1 = Book()
    9 book1.printPrice(2)

      没有加入转换器,数据实用不够方便,引入了类成员变量

     1 class Book():
     2     def __init__(self, title, price):
     3         self.title = title
     4         self.price = price
     5 
     6     def printPrice(self, num):
     7         print(self.title + ' : ', num, self.price * num)
     8 
     9 book1 = Book('picture', 1680)
    10 book1.printPrice(2)

      加入转换器,实用更方便

    二、类的继承:可以获取其他类成员的便捷方式:

      继承格式:1)class  2)SubClassName 3)(SuperClassName) 4):  //1是类的关键字,2是希望的子类名称,3父类名称为SuperClassName,将其放入小括号,4是定义类的必备符号

      超类:被继承的类

      子类:继承的类

     1 class Book():
     2     def __init__(self, title, price):
     3         self.title = title
     4         self.price = price
     5 
     6     def printPrice(self, num):
     7         print(self.title + ' : ', num, self.price * num)
     8 
     9 class ColorBook(Book):
    10     color = 'red'
    11     def printPrice(self, num):
    12         print(self.title , ' : ', num, self.price * num , ' , color: ', self.color)
    13 
    14 book0 = Book('cartoon', 8610)
    15 book0.printPrice(3)
    16 
    17 book1 = ColorBook('picture', 1680)
    18 book1.printPrice(2)

      超类是Book,子类是ColorBook,子类重写了printPrice

     1 class Book():
     2     def __init__(self, title, price):
     3         self.title = title
     4         self.__price = price
     5 
     6     def printPrice(self, num):
     7         print(self.title + ' : ', num, self.price * num)
     8 
     9     def getPrice(self):
    10         return self.__price
    11 
    12     def setPrice(self, price):
    13         self.__price = price
    14 
    15     def delPrice(self):
    16         self.__price = 0
    17 
    18     price = property(fget=getPrice, fset=setPrice, fdel=delPrice, doc='attribue of price')
    19 
    20 class ColorBook(Book):
    21     color = 'red'
    22     def printPrice(self, num):
    23         print(self.title , ' : ', num, self.price * num , ' , color: ', self.color)
    24 
    25 book0 = Book('cartoon', 8610)
    26 book0.printPrice(3)
    27 book0.price = 2680
    28 book0.printPrice(3)
    29 print(book0.price)
    30 del(book0.price)
    31 print(book0.price)
    32 
    33 book1 = ColorBook('picture', 1680)
    34 book1.printPrice(2)

      通过引入__前缀的属性,加入对属性的操作方式,加强属性的访问方式的控制,用属性管理的方式,具体就是第18行的代码,

     1 class Book():
     2     def __init__(self, title, price):
     3         self.title = title
     4         self.__price = price
     5 
     6     def printPrice(self, num):
     7         print(self.title + ' : ', num, self.price * num)
     8 
     9     @property
    10     def price(self):
    11         return self.__price
    12 
    13     @price.setter
    14     def price(self, price):
    15         self.__price = price
    16 
    17     @price.deleter
    18     def price(self):
    19         self.__price = 0
    20 
    21 class ColorBook(Book):
    22     color = 'red'
    23     def printPrice(self, num):
    24         print(self.title , ' : ', num, self.price * num , ' , color: ', self.color)
    25 
    26 book0 = Book('cartoon', 8610)
    27 book0.printPrice(3)
    28 book0.price = 2680
    29 book0.printPrice(3)
    30 print(book0.price)
    31 del(book0.price)
    32 print(book0.price)
    33 
    34 book1 = ColorBook('picture', 1680)
    35 book1.printPrice(2)

      通过装饰模式的属性定义方式,加入对属性的操作方式,加强属性的访问方式的控制,具体就是第9,13,17行的代码,

    三、类的多态

      方法的重写:继承后,子类中再次实现父类中的方法,并取而代之

      python中根本不提重载

     1 class Book():
     2     def __init__(self, title, price):
     3         self.title = title
     4         self.__price = price
     5 
     6     def printPrice(self, num):
     7         print(self.title + ' : ', num, self.price * num)
     8 
     9     @classmethod
    10     def printMaxNum(cls):
    11         print(20002)
    12 
    13     @property
    14     def price(self):
    15         return self.__price
    16 
    17     @price.setter
    18     def price(self, price):
    19         self.__price = price
    20 
    21     @price.deleter
    22     def price(self):
    23         self.__price = 0
    24 
    25 class ColorBook(Book):
    26     color = 'red'
    27     def printPrice(self, num):
    28         print(self.title , ' : ', num, self.price * num , ' , color: ', self.color)
    29 
    30 Book.printMaxNum()
    31 book0 = Book('cartoon', 8610)
    32 book0.printPrice(3)
    33 book0.price = 2680
    34 book0.printPrice(3)
    35 print(book0.price)
    36 del(book0.price)
    37 print(book0.price)
    38 
    39 book1 = ColorBook('picture', 1680)
    40 book1.printPrice(2)

      成员的访问规矩多了

     1 class Book():
     2     title = 'picture'
     3     price = 1680
     4 
     5     def printPrice(self, num):
     6         print(self.title + ' : ', num, self.price * num)
     7 
     8 book1 = Book()
     9 book1.printPrice(2)
    10 book1.title = 'dictionary'
    11 book1.price = '1580'
    12 print(book1.title, book1.price)
    13 print(Book.title, Book.price)

      第11行该的是对象book1的price,而类的price并没有改变,可以通过运行程序很容易得知结果

    四、特殊的方法

      与转换器__init__类似的方法主要有:

      __eq__  ==

      __ne__ !=

      __lt__  <

      __gt__  >

      __le__  <=

      __ge__  >=

      __add__  +

      __sub__  -

      __mul__  *

      __truediv__ /

      __floordiv__  //

      __mod__ %

      __pow__  **

     1 class Book():
     2     title = 'picture'
     3     price = 1680
     4 
     5     def printPrice(self, num):
     6         print(self.title + ' : ', num, self.price * num)
     7 
     8 class MyString():
     9     def __init__(self, text):
    10         self.text = text
    11 
    12     def __eq__(self, other):
    13         return self.text == other.text
    14 
    15 book1 = Book()
    16 book1.printPrice(2)
    17 book1.title = 'dictionary'
    18 book1.price = '1580'
    19 print(book1.title, book1.price)
    20 print(Book.title, Book.price)
    21 
    22 str1 = MyString('love')
    23 str2 = MyString('love')
    24 print(str1 == str2)

      重新实现特定符号作用的方法是不错的。

      

            

    人就像是被蒙着眼推磨的驴子,生活就像一条鞭子;当鞭子抽到你背上时,你就只能一直往前走,虽然连你也不知道要走到什么时候为止,便一直这么坚持着。
  • 相关阅读:
    git 创建一个空分支
    github page的两种类型
    hexo-theme-next
    github网页
    Linux下的CPU使用率与服务器负载的关系与区别
    mysql数据库优化日志(更)-howyue
    图片延时加载
    jQuery实现页面滚动时顶部动态显示隐藏
    TCP与UDP区别
    记一次网站服务器迁移(my)
  • 原文地址:https://www.cnblogs.com/guochaoxxl/p/15782537.html
Copyright © 2011-2022 走看看