win7怎么做网站域名绑定,东莞网站建站公司,网站开发广告语,企业邮箱登录入口首页五、Python的类与继承
5.1 Python面向对象编程
在现实世界中存在各种不同形态的事物#xff0c;这些事物之间存在各种各样的联系。在程序中使用对象来映射现实中的事物#xff0c;使用对象之间的关系描述事物之间的联系#xff0c;这种思想用在编程中就是面向对象编程。
…
五、Python的类与继承
5.1 Python面向对象编程
在现实世界中存在各种不同形态的事物这些事物之间存在各种各样的联系。在程序中使用对象来映射现实中的事物使用对象之间的关系描述事物之间的联系这种思想用在编程中就是面向对象编程。
1面向对象编程的含义
面向对象编程简称oop是一种编程范例。它提供了一种结构化程序的方法以便将属性和行为捆绑到单个对象中。
2类与对象定义
对象是一个抽象概念将对象划分为两个部分即静态部分和动态部分静态部分被称为属性任何对象都具备自身属性这些不仅是客观存在的而且是不能忽视的。 类是封装对象的属性和行为的载体对象是类的示例。
3面向对象的特征
面向对象程序设计有三大基本特征封装、继承、多态。 封装是面向对象编程的核心思想将对象的属性和行为封装起来而将对象的属性和行为封装起来的载体就是类。
4面向对象与面向过程编程的区别
面向过程思想在早期开发语言中大量使用它是分析出解决问题的步骤然后用函数将这些步骤一一实现使用的时候另行调用面向过程只考虑在函数中封装代码逻辑不考虑函数的归属关系。
5类的定义与使用
a、定义 在Python中类表示具有相同属性和方法的对象集合在使用类时需要先定义类然后再创建类的实例类的定义使用class关键字实现默认有init方法。
class dog:def _init_(self,name,age):self.name nameself.age agedef bark(self):print(woof!)
#创建类的实例
my_dog Dog(nameBuddy,age3)
#访问对象的属性
print(my_dog.name)#输出:buddy
#调用对象的方法
my_dog.bark()#输出:woofb、使用 通过实例化类来创建对象并通过对象访问属性和调用方法在上面的例子中Dog类定义了一个狗的对象具有name和age两个属性以及bark方法通过创建my_dog对象我们可以访问其属性和调用其方法。
5.2 属性和方法的定义和使用
1创建类与对象
a、属性
属性用于描述事物的特征如颜色、大小、数量等。可以分为类属性和对象属性。类的属性存储了类的各种数据定义位置有类的内部和方法的外部由该类所有的对象共同拥有。类属性可以通过类名访问也可以通过对象名访问但只能通过类名修改。
class Dog:count 0def _init_(self,name,age)self.name nameself.age ageDog.count 1 #在初始化时增加count的值def bark(self):print(Woof!)在类中属性是对象的特征或数据属性通常在构造方法中初始化并通过self关键字来引用。b、python的内置类属性
dict : 类的属性包含一个字典由类的数据属性组成doc :类的文档字符串name: 类名module: 类定义所在的模块类的全名是’main.className’如果类位于一个导入模块mymod中那么className.module 等于 mymodbases : 类的所有父类构成元素包含了一个由所有父类组成的元组
c、对象属性
对象属性是对象特征的描述定义非常灵活可在方法内部定义也可在调用实例时添加如scf.name和self.age都是对象属性。私有属性也是一种对象属性。
d、私有属性
在实例变量self前加单个下划线以保护变量变量并不是真正的受保护这只是Python开发者的约定在看到单个前置下划线的变量时并不会尝试访问和修改它双前置下划线会让Python解释器重写属性的名称以达到保护变量的目的。
e、构造函数
介绍
构造函数也称为初始化方法是一个特殊的方法当创建类的新实例时会自动调用。在Python中构造函数的名称是__init__。
代码示例
class Person: def __init__(self, name, age): self.name name self.age age p Person(Alice, 30)
print(p.name) # 输出: Alice
print(p.age) # 输出: 30f、析构函数
介绍
析构函数在对象被销毁前例如对象被垃圾回收调用用于执行清理操作如关闭文件或释放资源。在Python中没有显式的析构函数但可以使用__del__方法作为析构函数的类似物。然而由于Python的垃圾回收机制__del__方法并不总是会被调用。
代码示例虽然不推荐依赖__del__进行资源清理
class MyClass: def __del__(self): print(对象被销毁) # 创建一个对象但在大多数情况下我们不会看到对象被销毁的输出
obj MyClass()g、对象方法
介绍
对象方法是类的实例可以调用的方法。它们通常用于操作实例的状态。
代码示例
class Circle: def __init__(self, radius): self.radius radius def area(self): return 3.14 * self.radius ** 2 circle Circle(5)
print(circle.area()) # 输出圆的面积h、私有方法
介绍
Python没有真正的私有方法或属性但有一种约定俗成的做法是使用双下划线前缀来表示“私有”成员。然而这只是一个命名约定Python仍然可以从外部访问这些成员。真正的“私有”性是通过其他机制如属性装饰器实现的。
代码示例
class MyClass: def __private_method(self): print(这是一个私有方法) def public_method(self): self.__private_method() # 类的内部可以调用它 # 但仍然可以从外部“访问”它尽管不推荐
obj MyClass()
obj._MyClass__private_method() # 注意这里的命名转换i、Python内置类方法
Python的内置方法也称为魔法方法或双下划线方法确实非常多它们提供了丰富的功能和定制性。这里是一些常用的内置方法的补充以及它们的简要说明和示例
1. 初始化与销毁
__init__(self, ...): 构造函数初始化对象时调用。
__del__(self): 析构函数对象被销毁前调用但通常不推荐在__del__中执行重要清理工作。
2. 字符串与表示
__str__(self): 返回对象的“非正式”字符串表示。
__repr__(self): 返回对象的“正式”字符串表示供调试使用。
3. 数值运算
__add__(self, other): 实现运算符。
__sub__(self, other): 实现-运算符。
__mul__(self, other): 实现*运算符。
__truediv__(self, other): 实现/运算符Python 3中的真实除法。
__floordiv__(self, other): 实现//运算符整数除法。
__mod__(self, other): 实现%运算符取模。
__pow__(self, other): 实现**运算符幂运算。
4. 序列操作
__len__(self): 返回对象的长度或元素个数。
__getitem__(self, index): 实现item[index]。
__setitem__(self, index, value): 实现item[index] value。
__delitem__(self, index): 实现del item[index]。
__contains__(self, item): 实现in运算符。
5. 比较运算
__lt__(self, other): 实现运算符。
__le__(self, other): 实现运算符。
__eq__(self, other): 实现运算符。
__ne__(self, other): 实现!运算符。
__gt__(self, other): 实现运算符。
__ge__(self, other): 实现运算符。
6. 集合操作
__hash__(self): 返回对象的哈希值如果对象是可哈希的。
__iter__(self): 返回一个迭代器对象。
__next__(self): 迭代器对象的next()方法。
__getattribute__(self, name): 访问对象属性时调用。
__setattr__(self, name, value): 设置对象属性时调用。
__delattr__(self, name): 删除对象属性时调用。
7. 上下文管理
__enter__(self): 使用with语句时进入上下文时调用。
__exit__(self, exc_type, exc_val, exc_tb): 使用with语句时退出上下文时调用。
8. 容器操作
__contains__(self, item): 实现in运算符判断容器中是否包含某个元素。
__iter__(self): 返回一个迭代器对象用于遍历容器中的元素。
示例自定义一个可迭代对象
python
class MyRange: def __init__(self, start, end): self.value start self.end end def __iter__(self): return self def __next__(self): if self.value self.end: current_value self.value self.value 1 return current_value else: raise StopIteration # 使用自定义的MyRange类
for i in MyRange(0, 5): print(i) # 输出: 0 1 2 3 45.3 类的继承
继承是面向对象编程的一个重要概念它允许一个类子类继承另一个类父类的属性和方法。子类可以继承父类的特征也可以通过定义自己的属性和方法来扩展或修改父类的行为。一个类继承另一个类时它将自动获得另一个类的属性和方法原有的类称为父类。 新类称为子类子类不能继承父类的私有属性和方法但能继承父类其他的属性和方法同时还可以定义自己的属性和方法子类定义格式如下
class 子类名父类名1子类的方法_init_
如果子类重新定义了父类方法后还需要访问父类的同名方法如__init__可以使用super关键字。
2给子类定义属性和方法
一个类继承另一个类后可添加区分子类里父类所需的新属性和方法。 定义子类时可以根据需要添加任意数量的属性和方法但要注意子类中只添加子类独有的属性和方法如果是所有子类都拥有的应该添加到父类的属性和方法中。
3重写父类方法
对于父类中的方法如果它不符合子类模拟的实物的行为都可对其进行重写为此可在子类中定义与父类同名的方法这样python程序在运行时将不会考虑这个父方法而只考虑同名的子类方法。
4将实例用作属性
使用代码模拟实物时可能会发现需要给类添加的细节越来越多属性和方法清单以及文件都越来越长。在这种情况下可能需要将类的一部分作为一个独立的类提取出来将大类拆分成多个协同工作的小类即将一个类的实例作为另一个类的属性。
5.4 导入类
类的编写也要遵循模块化编程导入类有多种方式可以导入单个类导入多个类导入整个模块导入模块中的所有类等。