前言
该文章主要描述了对象的定义,使用
2020-01-02-09:58:27
天象独行
0X01;什么是类?
类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
局部变量:定义在方法中的变量,只作用于当前实例的类。
实例变量:在类的声明中,属性是用变量来表示的,这种变量就称为实例变量,实例变量就是一个用 self 修饰的变量。
1 '''
2 类定义:关键字“class”标识类定义,“ClassName”标识类名称。
3 '''
4 class ClassName:
5 <statement-1>
6 .
7 .
8 <statement-N>
0X02;什么是对象?
对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。
方法:类中定义的函数。
类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
1 class Myclass:
2 '''定义类'''
3 i = 1234567
4 def f(self): #定义一个类方法
5 return 'hello world'
6
7 #实例化类
8 x = Myclass()
9 #访问类的属性和方法
10 print("Myclass类的属性i为: ",x.i)
11 print("Myclass类的方法f为:",x.f())
1 '''运行结果:'''
2 C:\Users\aaron\Desktop\Pytoon-cade\venv\Scripts\python.exe C:/Users/aaron/Desktop/Pytoon-cade/urllib-Study.py
3 Myclass类的属性i为: 1234567
4 Myclass类的方法f为: hello world
5
6 Process finished with exit code 0
0X03;什么是继承?
继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。
语法格式:
1 class DerivedClassName(BaseClassName):
2 <statement-1>
3 .
4 .
5 <statement-N>
6 '''
7 注意:BaseClassName(示例中的基类名)必须与派生类定义在一个作用域内。
8 '''
举例单继承:
1 #!Python3
2
3 #定义一个类
4 class mycalss:
5 name = ''
6 age = 0
7 __weight = 0
8 def __init__(self,n,a,w):
9 self.name = n
10 self.age = a 11 self.__weight = w 12 def speak(self): 13 print("%s 说:我 %d 岁。"%(self.name,self.age)) 14 15 #继承类 16 class student(mycalss): 17 grade = '' 18 def __init__(self,n,a,w,g): 19 #调用父类的函数 20 mycalss.__init__(self,n,a,w) 21 self.grade = g 22 #覆写父类的方法 23 def speak(self): 24 print("%s 说:我%d岁了,我现在在读%d年级"%(self.name,self.age,self.grade)) 25 26 s = student('Peter',10,6,3) 27 s.speak()
1 '''运行结果:'''
2 C:\Users\aaron\Desktop\Pytoon-cade\venv\Scripts\python.exe C:/Users/aaron/Desktop/Pytoon-cade/urllib-Study.py
3 Peter 说:我10岁了,我现在在读3年级
4
5 Process finished with exit code 0
举例多继承:
注意:需要注意圆括号中父类的顺序,若是父类中有相同的方法名,而在子类使用时未指定,python从左至右搜索 即方法在子类中未找到时,从左到右查找父类中是否包含方法。
1 #!Python3
2
3 #定义第一个类
4 class mycalss:
5 name = ''
6 age = 0
7 __weight = 0
8 def __init__(self,n,a,w):
9 self.name = n
10 self.age = a 11 self.__weight = w 12 def speak(self): 13 print("%s 说:我 %d 岁。"%(self.name,self.age)) 14 15 #定义第二个类 16 class speaker: 17 topic = '' 18 name = '' 19 def __init__(self,n,t): 20 self.name = n 21 self.topic = t 22 def speak(self): 23 print("我叫 %s ,我是一个演说家,现在我的演讲主题是%s"%(self.name,self.topic)) 24 25 #多重继承 26 class sample(speaker,mycalss): 27 a = '' 28 def __init__(self,n,a,w,g,t): 29 mycalss.__init__(self,n,a,w) 30 speaker.__init__(self,n,t) 31 32 test = sample('Tim',25,3,4,'Python') 33 test.speak() #方法名同,默认调用的是在括号中排前地父类的方法
1 #运行结果:
2 C:\Users\aaron\Desktop\Pytoon-cade\venv\Scripts\python.exe C:/Users/aaron/Desktop/Pytoon-cade/urllib-Study.py
3 我叫 Tim ,我是一个演说家,现在我的演讲主题是Python
4
5 Process finished with exit code 0
0X04;什么是方法重写?
方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
1 #! Python3
2 class Parent: #父类
3 def myMethod(self):
4 print('调用父类方法')
5
6 class child(Parent): #子类
7 def myMethod(self):
8 print("调用子类方法")
9
10 C = child()
11 C.myMethod() #子类调用重写后的方法
12 super(child,C).myMethod() #调用父类的方法
1 #运行结果:
2 C:\Users\aaron\Desktop\Pytoon-cade\venv\Scripts\python.exe C:/Users/aaron/Desktop/Pytoon-cade/urllib-Study.py
3 调用子类方法
4 调用父类方法
5
6 Process finished with exit code 0
0X05;什么是类的私有方法?
__private_method:两个下划线开头,声明该方法为私有方法,只能在类的内部调用 ,不能在类的外部调用。self.__private_methods。
1 #!Python3
2
3 class a:
4 __s = 0 #私有变量
5 b = 0 #公开变量
6
7 def count(self):
8 self.__s += 1
9 self.b += 1
10 print(self.__s)
11
12 count = a()
13 count.count()
14 print(count.b) 15 print(count.__s) #报错,实例不能访问私有变量
1 #运行结果
2 C:\Users\aaron\Desktop\Pytoon-cade\venv\Scripts\python.exe C:/Users/aaron/Desktop/Pytoon-cade/urllib-Study.py
3 1
4 1
5 Traceback (most recent call last):
6 File "C:/Users/aaron/Desktop/Pytoon-cade/urllib-Study.py", line 15, in <module>
7 print(count.__s) #报错,实例不能访问私有变量
8 AttributeError: 'a' object has no attribute '__s'
9
10 Process finished with exit code 1
类的专有方法:
- __init__ : 构造函数,在生成对象时调用
- __del__ : 析构函数,释放对象时使用
- __repr__ : 打印,转换
- __setitem__ : 按照索引赋值
- __getitem__: 按照索引获取值
- __len__: 获得长度
- __cmp__: 比较运算
- __call__: 函数调用
- __add__: 加运算
- __sub__: 减运算
- __mul__: 乘运算
- __truediv__: 除运算
- __mod__: 求余运算
- __pow__: 乘方
0X0N;常见使用方法举例:
A;类的方法
在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self, 且为第一个参数,self 代表的是类的实例。
1 #! Python3.8
2
3 #定义一个类
4 class people:
5 #定义基本属性
6 name = ''
7 age = 0
8 #定义私有属性,私有属性在类外部无法直接访问
9 __weight = 0
10 #定义构造方法
11 def __init__(self,n,a,w):
12 self.name = n
13 self.age = a 14 self.__weight = w 15 def speak(self): 16 print("%s说:我%d岁。"%(self.name,self.age)) 17 18 #实例化类 19 p = people('aaron',10,30) 20 p.speak()
1 #运行结果:
2
3 C:\Users\aaron\Desktop\Pytoon-cade\venv\Scripts\python.exe C:/Users/aaron/Desktop/Pytoon-cade/urllib-Study.py
4 aaron说:我10岁。
5
6 Process finished with exit code 0