• 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:UsersaaronDesktopPytoon-cadevenvScriptspython.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:UsersaaronDesktopPytoon-cadevenvScriptspython.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:UsersaaronDesktopPytoon-cadevenvScriptspython.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:UsersaaronDesktopPytoon-cadevenvScriptspython.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:UsersaaronDesktopPytoon-cadevenvScriptspython.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:UsersaaronDesktopPytoon-cadevenvScriptspython.exe C:/Users/aaron/Desktop/Pytoon-cade/urllib-Study.py
    4 aaron说:我10岁。
    5 
    6 Process finished with exit code 0
  • 相关阅读:
    Celery
    mysql 8.0.12 创建并授权出现的问题
    request对象
    Haystack搜索框架
    Django的缓存机制
    跨域问题
    解析器
    url控制器与响应器
    学期总结
    C语言I博客作业09
  • 原文地址:https://www.cnblogs.com/aaron456-rgv/p/12132147.html
Copyright © 2020-2023  润新知