Python3---面对对象
前言
该文章主要描述了对象的定义,使用
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