第十五天学Python:类(3):私有、类的模块、动静态

在说完什么是类以及类的继承.这两个重点以后,我们今天来对类的内容进行一下简单地收尾补充:

私有

我们在定义类的时候会发现,像__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,需要做一个小项目练手的同学,在接下来的几期里,会从理论知识、实际应用两个方面从一个空白工程开始一步步地完成它,我将在那里分享我当初完成它的全过程,以及心得体会与方案建议,欢迎感兴趣的小伙伴前来围观!

原创文章 23 获赞 103 访问量 2685

猜你喜欢

转载自blog.csdn.net/k_ksy/article/details/105859247