在说完什么是类以及类的继承.这两个重点以后,我们今天来对类的内容进行一下简单地收尾补充:
私有
我们在定义类的时候会发现,像__init__这样的函数,是只有这个类本身能使用的,而在实例化以后并不能调用它,
这里面并没有__init__函数。我们同样可以在自己的类里添加这样的仅用于这个类本身的函数,即变为“私有”
私有的方法很简单:只需要我们在想私有化的函数名前面加两个下划线就好了,比如:
class Test():
def __init __(self):
self.A = 'Test_One'
self.B = 'Test_Two'
def __OutA(self):
print(self.A)
def OutB(self):
print(self.B)
这个类里面就是把OutA私有了,OutB没有,接下来我们把这个类实例化,看一下能调用哪个方法:
这样我们就完成了"私有"。
在类里面,除了__init__这样生成对象用的构造函数,还有很多专有的方法:像__del__释放对象用的析构函数;__len__获得长度;__pow__乘方等等
类的模块
在面对小量级并且是我们自己使用的程序时,我们可以把“类”和程序放到同一个.py里,但是当我们的代码量非常多、或者需要把类共享给别人时,这种写法就很不得体。所以,为了便于自己管理代码以及分享,我们可以把我们自己的类统一放到模块里,然后再在不同的程序里调用。
建立模块
我们把上一期的 Cook 类保存到一个单独的.py文件,命名为“My_Class”
接下来,我们再新建一个.py文件,在新的程序文件里调用 My_Class 里的类:
from My_Class import*
(*是说把模块里的所有类都导入)
如果不想全部调用的话,则可以写:
from My_Class import Cook
然后在程序中,我们就可以使用此模块里的类了:
test = Cook('鸡蛋','西红柿')
print('%s'%( test.fry() ))
实例化输出:
鸡蛋 搅匀翻炒 西红柿 切片入锅 放盐翻炒 摆盘
静态类
之前说的类都是可以实例化的类,又叫做动态类。除了这种,还有一种不能实例化的类——静态类
二者有什么区别呢?
- 静态类内部没有“self”,所以不能被实例化(再强调一遍self不是关键字)
- 静态类不能用__init__
- 静态类虽然不能被实例化,但是可以把相关的变量或者函数放到这里面,供其他代码调用方便
此为一个静态类
class Class_Static():
name = 'KSY'
age = 18
tel = '181后面随便'
def mine_1():
return 1
def mine_2(num):
return num
def mine_3(num):
return num*3
当我们想调用这静态类里面的变量或函数时,直接用类名即可:
print('%s'%( Class_Static.name ))
print('%d'%( Class_Static.age ))
print('%s'%( Class_Static.tel ))
a = Class_Static.mine_1()
b = Class_Static.mine_2(2)
c = Class_Static.mine_3(2)
print('%d,%d,%d'%( a,b,c ))
输出如下:
KSY
18
181后面随便
1,2,6
- 静态类是不能实例化的,如果我强行实例化的话,程序会报错
>>> K = Class_Static()
>>> K.mine_1()
TypeError: mine_1() takes 0 positional arguments but 1 was given
在定义了静态类以后,我们同样可以把它存在模块里,现在我们把它放到之前的“My_Class.py”里。这次我们单独调用这个静态类,不再调用之前的Cook类了
from My_Class import Class_Static
调用其函数的方法和之前是完全相同的:
print('%s'%( Class_Static.name ))
print('%d'%( Class_Static.age ))
print('%s'%( Class_Static.tel ))
再调用其变量值、或者修改它
print('%d'%( Class_Static.age ))
Class_Static.age = 17
print('%d'%( Class_Static.age ))
18
17
…
…
今天就说这么多好了/doge,主要是对类的内容作了一些补充。面向对象编程以及类的使用还是需要各位平日里多多练习,不然很容易写出来“形似面向对象,实际却是面向过程”的程序,包括我自己也容易犯这样的错误,只有多加练习才能够逐渐掌握。
新系列!
正值五一劳动节假期,好不容易多出来几天假,还不更加勤奋地码字吗?/doge 。
经过前几天的准备,我决定拾起我的老本行!于是新开了一个短篇系列:
三天让车跑起来!stm32寻迹小车!——第一天.这个系列比较适合刚刚上手32,需要做一个小项目练手的同学,在接下来的几期里,会从理论知识、实际应用两个方面从一个空白工程开始一步步地完成它,我将在那里分享我当初完成它的全过程,以及心得体会与方案建议,欢迎感兴趣的小伙伴前来围观!