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
posted @ 2020-01-02 11:38  天象独行  阅读(232)  评论(0编辑  收藏  举报