Python3---面对对象2

前言

该文章主要描述了对象的定义,使用

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

猜你喜欢

转载自www.cnblogs.com/aaron456-rgv/p/12132184.html