python面向对象

yizhihongxing

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

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

 

类和对象的主要区别:

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

 

面向对象的三大特征:

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日

相关文章

  • 如何使用appnium爬取视频数据

    要先安装Appium,并用它来查找对应元素的id、xpath等信息   from appium import webdriver from appium.webdriver.extensions.android.nativekey import AndroidKey from selenium.webdriver.common.by import By im…

    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循环语句

    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输入和输出

    输出 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运算符

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

    Python开发 2023年4月2日
    00
  • python函数

    定义函数的一般格式: det function():   statements   return a return用于退出函数,向调用方返回一个表达式   函数可以不设置参数,也可以设置参数: def function1(): print(‘大湘菜’) def function2(a): print(a) function1() function2(‘小湘菜…

    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
  • python爬虫

    Web请求过程 1、服务器渲染:在服务器那边直接把数据和html整合在一起,统一返回给浏览器 在页面源代码中能看到数据 2、客户端渲染:第一次请求只有一个html骨架,第二次请求拿到数据,进行数据展示(一般为XHR) 在页面源代码中看不到数据 <可用检查网页或者F12来查看>   HTTP协议 Hyper Text Transfer Protoc…

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