IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> python面向对象 -> 正文阅读

[游戏开发]python面向对象

魔法函数

????????魔法函数名字是固定的。一般情况下我们不需要通过明显的方式调用它们,但是它们会在特定阶段自动执行。

??__init__函数,它可以在实例化对象的时候修改属性的值

class Rectangle: 
    length = 0 
    width = 0  
    def __init__(self, length, width): 
        self.length =length 
        self.width =width  
    def area(rect): 
        return rect.length *rect.width  
    def perimeter(rect): 
        return 2 * (rect.length+rect.width)
rect = Rectangle(3,4) # 当创建对象时,__init__函数被自动调用,3和4会创给length和width.
print(rect.length,rect.width)
print(rect.area())

????????????????魔法函数写在类里面,所以init函数的至少有一个参数self。通过参数给要修改的属性传参,一般参数名往往和属性名一致

????????一旦写了__init__函数,并且__init__函数除了self以外还有其他参数,就需要为__init__函数除了self以外的参数传入值。也可以给__init__函数的参数设置默认值。

????????????????__str__函数,该函数要求返回一个字符串,这个字符串的信息要能够把对象的信息组织起来,当我们使用print函数打印对象的时候,实际上打印的就是__str__函数返回的字符串。

class Rectangle: 
    length = 0 
    width = 0  
    def __init__(self,length=0,width=0): 
        self.length =length 
        self.width =width  
    def area(rect): 
        return rect.length *rect.width  
    def perimeter(rect): 
        return 2 * (rect.length +rect.width)  
    def __str__(self): 
        return '长方形的长是' + str(self.length) + ',宽是' + str(self.width) 
rect =Rectangle(3, 4)
print(rect)

封装

????????公有成员是可以公开使用的,即可以在类的内部进行访问,也可以在外部程序中使用。Python中类的成员函数、成员变量默认都是公开的。

????????私有成员在类的外部不能直接访问,一般在类的内部进行访问和操作,或者在类的外部通过调用对象的公有成员方法来访问,这是类的封装特性的重要体现。

????????__xxx:以两个下划线开头,表示类的私有成员,一般只有类对象自己能访问,子类对象也不能直接访问该成员,但可以通过“对象名._类名__xxx”这样的特殊方式来访问。

class Point: 
    x = 10 
    __y = 20 
    z = 30 
    def get_x(self): 
        return self.x 
    def get_y(self): 
        return self.__y 
    def __get_z(self): 
        return self.z

继承

单继承

????????面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。继承用于指定一个类将从其父类获取其大部分或全部功能。

????????它是面向对象编程的一个特征。这是一个非常强大的功能,方便用户对现有类进行几个或多个修改来创建一个新的类。新类称为子类或派生类,从其继承属性的主类称为基类或父类。

????????子类或派生类继承父类的功能,向其添加新功能。它有助于代码的可重用性。继承的语法如下所示。

class 派生类(基类):  
    派生类类内语句

只需要继承基类这个动作,就可以访问到基类的属性和方法了,它提高了代码的可扩展性。

?????????如果派生类中有__init__()方法,那么基类的__init__()方法不会被自动调用,它需要在其派生类的构造中专门调用。

?????????如果派生类中没有__init__()方法,且基类中有__init__()方法,那么基类的__init__()方法会被自动调用

?????????调用父类的方法有三种:

????????????????方法1:父类名字.父类中的方法名(self,[参数1,参数2,参数3,……])

????????????????方法2:super().父类中的方法名([参数1,参数2,参数3,……])

????????????????方法3:super(当前类的名字,self).父类中的方法名([参数1,参数2,参数3,……])

class Person(object): 
    def __init__(self,name,gender): 
        self.name =name 
        self.gender =gender 
        print("Person类__init__()。", "姓名:",self.name)
class Student(Person): 
    def __init__(self,name,gender,score): 
        super().__init__(name,gender) 
        self.score =score 
        print("Student类__init__()。", "姓名:",self.name)
student = Student('tom','male',10)

?????????Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。

任何事情都有利有弊:继承的一个弱点就是,可能特殊的类又有其他特殊的地方,又会定义一个类,其下也可能再定义类,这样就会造成继承的那条线越来越长,使用继承的话,任何一点小的变化也需要重新定义一个类,很容易引起类的爆炸式增长,产生一大堆有着细微不同的子类。所以有个“多用组合少用继承”的原则。

多重继承

????????Python子类可以继承一个基类,也可以继承多个基类,这就是多重继承。类的多重继承的语法如下。????

class 派生类(基类1,基类2,...): 
    派生类类内语句

????在Python3.x版本其寻找方法遵循MRO原则,可以通过类.__mro__属性输出对应的方法寻找顺序。

注意:__mro__属性显示指定类的所有继承脉络和继承顺序,假如这个指定的类不具有某些方法和属性,

但与其有血统关系的类中具有这些属性和方法,则在访问这个类本身不具有的这些方法和属性时,会按照__mro__显示出来的顺序一层一层向后查找,直到找到为止。

class P1: 
    def foo(self): 
        print("p1-foo")
class P2: 
    def foo(self): 
        print("p2-foo") 
    def bar(self): 
        print("p2-bar")
class C1(P1,P2): 
    pass 
class C2(P1,P2): 
    def bar(self): 
        print("C2-bar")
class D(C1,C2): 
    pass
print(D.__mro__) 
d=D()
d.foo()

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章           查看所有文章
加:2021-09-11 19:08:27  更:2021-09-11 19:10:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 12:32:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码