python面向对象

传统的结构化设计方法的基本点是面向过程,系统被分解成若干个过程。而面向对象的方法是采用构造模型的观点,在系统的开发过程中,各个步骤的共同的目标是建造一个问题域的模型。在面向对象的设计中,初始元素是对象,然后将具有共同特征的对象归纳成类,组织类之间的等级关系,构造类库。在应用时,在类库中选择相应的类

面向对象编程的主要思想是把构成问题的各个事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙一个事物在整个解决问题的步骤中的行为

 

类和对象的主要区别:

对象是类的一个实例,类是一个模板,它描述一类对象的行为和状态

 

面向对象的三大特征:

1、封装

两层含义:一层含义是把对象的属性和行为看成一个密不可分的整体,将这两者“封装”在一个不可分割的独立单元(即对象)中;另一层含义指“信息隐藏”,把不需要让外界知道的信息隐藏起来

2、继承

子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为

3、多态

同一个行为具有多个不同表现形式或形态的能力

 

类定义

一般形式为:

class ClassName:

  statement

 

类对象

类对象支持两种操作:属性引用(obj.name)和实例化:

class GoodClass:
    good = 1000

    def GoodFunction(self):
        return 'this is a good function'


c = GoodClass()  # 实例化
print(c.good)  # 访问属性和方法
print(c.GoodFunction())

结果为:

1000
this is a good function

 

类有一个名为__init__()的特殊方法,即构造方法,在类实例化时会自动调用, __init__() 方法可以有参数,参数通过 __init__() 传递到类的实例化操作上:

class GoodClass:
    def __init__(self, n, a):
        self.name = n
        self.age = a


s = GoodClass('大湘菜', 18)
print(s.name)

结果为:

大湘菜

 

如果在类实例化时不传入参数会报错:

class GoodClass:
    def __init__(self, n, a):
        self.name = n
        self.age = a


s = GoodClass()
print(s.name)

结果为:

s = GoodClass()
TypeError: __init__() missing 2 required positional arguments: 'name' and 'age'

 

类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称,按照惯例它的名称是self。self代表类的实例,而非类:

class GoodClass:
    def print_self(self):
        print(self)
        print(self.__class__)


s = GoodClass()
s.print_self()  # 注意不要写成print(s.print_self())

结果为:

<__main__.GoodClass object at 0x000002026CD9E220>
<class '__main__.GoodClass'>

这说明self代表的是类的实例,代表当前对象的地址,而self.__class__指向类

 

类的方法

使用def关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self, 且为第一个参数,self 代表的是类的实例

 

继承

子类(派生类)会继承父类(基类)的属性和方法:

class Base:
    x = 'Hi, I am base'

    def __init__(self, n, a):
        self.name = n
        self.age = a

    def info(self):
        print('姓名为{},年龄为{}'.format(self.name, self.age))


class Child(Base):
    def __init__(self, n, a):  # 调用父类的构函
        Base.__init__(self, n, a)


c = Child('大湘菜', 18)
c.info()
print(c.x)

结果为:

姓名为大湘菜,年龄为18
Hi, I am base

 

子类和父类必须定义在同一个作用域内

 

多继承

一般形式为:

class Child(Base1, Base2, …)

  statement

需要注意圆括号中父类的顺序,若是父类中有相同的方法名,而在子类使用时未指定,python从左到右查找父类中是否包含方法

 

方法重写,即在子类重写父类的方法:

class Parent:
    def myMethod(self):
        print('I am parent')


class Child(Parent):
    def myMethod(self):
        print('I am child')


c = Child()
c.myMethod()  # 子类调用重写方法
super(Child, c).myMethod()  # 用子类对象调用父类已被覆盖的方法

结果为:

I am child
I am parent

其中super()函数用于调用父类(超类)

 

类的私有属性

以两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问

 

类的私有方法:

以两个下划线开头,声明该方法为私有方法,只能在类的内部调用 ,不能在类的外部调用

 

类的专有方法

__init__ 构造函数,在生成对象时调用
__del__ 析构函数,释放对象时使用
__repr__ 打印,转换
__setitem__ 按照索引赋值
__getitem__ 按照索引获取值
__len__ 获得长度
__cmp__ 比较运算
__call__ 函数调用
__add__ 加运算
__sub__ 减运算
__mul__ 乘运算
__truediv__ 除运算
__mod__ 求余运算
__pow__ 乘方

 

运算符重载

可以对类的专有方法进行重载,即重新进行定义

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python面向对象 - Python技术站

(0)
上一篇 2023年4月2日 下午5:43
下一篇 2023年4月2日

相关文章

  • python输入和输出

    输出 1、表达式语句 2、print() 3、write() 美化输出格式 repr()产生一个解释器易读的表达形式: a = ‘the sea has bank\nmy love is boundless’ print(a) print(repr(a)) # 可以转义特殊字符 结果为: the sea has bank my love is boundle…

    Python开发 2023年4月2日
    00
  • python模块

    python模块是一个py文件,一个模块只会被导入一次   python在编译或安装的时候会确定搜索路径,使用import语句的时候,python解释器就从搜索路径(即一系列目录名)中查找模块 import sys print(sys.argv) # 命令行参数 print(sys.path) # 路径 结果为: [‘D:/Pycharm/pythonPro…

    Python开发 2023年4月2日
    00
  • 如何用html写书

    原理:利用xml.etree.ElementTree对html进行解析和写入 # encoding=utf-8import xml.etree.ElementTree as ET # 解析html、xmlname = input(‘type in file name:’)def circle(): tree = ET.parse(f'{name}.html’…

    Python开发 2023年4月2日
    00
  • python命名空间和作用域

    命名空间是从名称到对象的映射,大部分的命名空间都是通过 Python 字典来实现的   命名空间查找顺序:局部命名空间、全局命名空间、内置命名空间   相同的对象名称可以存在于多个命名空间中   作用域就是一个可以直接访问命名空间的正文区域。程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。变量的作用域决定了在哪一部分程序可以访问…

    Python开发 2023年4月2日
    00
  • python循环语句

    while循环 一般形式: while condition:   statement1 else:   statement2   a = 0 while a < 3: print(a) a = a + 1 else: print(a, ” 大于或等于3″) 结果为: 0 1 2 3 大于或等于3   无限循环: while True: # 或者一个永远…

    Python开发 2023年4月2日
    00
  • python基本数据类型

    python的变量不需要声明,但在使用前必须要赋值   多个变量赋值: a = b = c = 1 x, y, z = 1, True, ‘大湘菜’   python有六个标准的数据类型: Number、String、Tuple、List、Set、Dictionary,其中前三者为不可变数据,后三者为可变数据   Number: a, b, c, d = 1…

    Python开发 2023年4月2日
    00
  • pythonFile方法

    open()方法用于打开一个文件,并返回文件对象,注意最后一定要关闭文件对象,即调用close()方法 一般形式为: open(file, mode= , buffering= , encoding= , errors= , newline= , closefd= , opener= )   参数说明: file: 必需,文件路径(相对或者绝对路径) mod…

    Python开发 2023年4月2日
    00
  • python运算符

    算术运算符: + – * / % ** //   比较运算符: == != > < >= <=   赋值运算符: = += -= *= /= %= **= //= :=(海象运算符)   其中海象运算符用于在表达式内部为变量赋值: name = ‘大湘菜’ if n := len(name) < 4: print(‘a nice…

    Python开发 2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部