本文主要讲解三个方面内容:
1. 什么是类
2. 类的方法
3. 类的特性 (1.封装 2.继承 3.多态)
1. 什么是类
面向对象最重要的概念就是类(class)和实例(instance);
类是抽象的模板,python中原生的类,比如dict, list 等属于类;也可以自定义类,比如用一个Student类表示学生。
而实例是根据类创建出来的一个个具体的“对象”,属于同一个类的实例可能有自己不同的属性。
line1 定义类名
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 类方法
声明形式:
静态方法: 用 @staticmethod 装饰的不带 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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。