ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python类的学习笔记1

2022-01-09 22:32:49  阅读:188  来源: 互联网

标签:__ title python self 笔记 学习 num price def


一、封装

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

  数据:成员变量

  操作方法:成员方法

  类的格式: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)

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

  

        

标签:__,title,python,self,笔记,学习,num,price,def
来源: https://www.cnblogs.com/guochaoxxl/p/15782537.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有