Python中的类

 

本文主要讲解三个方面内容:

1. 什么是类

2. 类的方法

3. 类的特性 (1.封装    2.继承   3.多态)

 

1. 什么是类

面向对象最重要的概念就是类(class)实例(instance);

是抽象的模板,python中原生的类,比如dict, list 等属于类;也可以自定义类,比如用一个Student类表示学生。

实例是根据类创建出来的一个个具体的“对象”,属于同一个类的实例可能有自己不同的属性。

line1 定义类名

line2 定义初始化函数,一般用于属性的初始化

1 class firstClass():
2     def __init__(self):
3         print('第一个类')
4 firstClass()

 

输出:

第一个类
<__main__.firstClass at 0x7f599cc82850>

这样就算创建了我们的第一个类了。大家可以看到这里面有一个self,其实它指的就是类aa的实例。每个类中的函数只要你不是类函数或者静态函数你都得加上这个self,当然你也可以用其他的代替这个self,只不过这是python中的写法,就好比Java 中的this。

2. 类的方法

根据可通过访问对象的不同分为:(静态方法、类方法和普通方法)

根据类的安全性不同分为:(安全方法、私有方法)

 

2.1 静态方法

2.2 类方法

2.3 普通方法(实例方法)

声明形式

静态方法: 用 @staticmethod 装饰的不带 self 参数的方法叫做静态方法,类的静态方法可以没有参数,可以直接使用类名调用。

普通方法: 默认有个self参数,且只能被对象调用。

类方法: 默认有个 cls 参数,可以被类和对象调用,需要加上 @classmethod 装饰器

 

2.4 安全方法

2.5 私有方法

安全方法:可以在外部进行调用并且其他方法也能访问到,它允许本身的任何方法进行访问,并可在外部调用,安全属性也是;def _f()

私有方法:只能在私有方法内部调用,不能通过类名或者类的实例名来调用,所以你可以在其他方法中通过self.ww来调用或者cls.ww来调用,这样就做到了私有的功能。 def __f()

 

 1 class newClass():
 2     def __init__(self):
 3         print('第一个类启动')
 4     
 5     def norm(self):
 6         print("普通方法")
 7         
 8     @staticmethod
 9     def stam():
10         print("静态方法")
11         
12     @classmethod
13     def classm1(cls,num):
14         cls.num = 12
15         print(num)
16         
17     @classmethod
18     def classm2(cls,num):
19         num = 12
20         print(cls.num)
21         
22 print("-------类实例访问---------")
23 a = newClass()
24 a
25 a.norm()
26 a.stam()
27 a.classm1(10)
28 a.classm2(15)
29 print("-------类直接访问----------")
30 newClass().norm()
31 newClass().stam()
32 newClass().classm1(10)
33 newClass().classm2(15)

输出:

 1 -------类实例访问---------
 2 第一个类启动
 3 普通方法
 4 静态方法
 5 10
 6 12
 7 -------类直接访问----------
 8 第一个类启动
 9 普通方法
10 第一个类启动
11 静态方法
12 第一个类启动
13 10
14 第一个类启动
15 12

上面的代码中,a = newClass()和newClass()是一样的;都是对类进行了实例化;

 

 

另一个例子:

class Classname:
    @staticmethod
    def fun():
        print('静态方法')

    @classmethod
    def a(cls):
        print('类方法')

    # 普通方法
    def b(self):
        print('普通方法')

Classname.fun()
Classname.a()

C = Classname()
C.fun()
C.a()
C.b()

输出

静态方法
类方法
静态方法
类方法
普通方法

输入:

Classname.b()

输出:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-18-0c335b005b0f> in <module>
----> 1 Classname.b()

TypeError: b() missing 1 required positional argument: 'self'

因为普通方法只能通过实例进行调用,不能使用类直接调用

 

 

3. 类的特性

封装、继承、多态、动态值修改(slots)

 

posted @ 2021-05-20 10:28  hi_mxd  阅读(858)  评论(0编辑  收藏  举报