Python OOP实现
admin
2023-08-02 22:20:04
0

OOP(面向对象编程)的思想在很多语言中都已经很成熟了, 在Python里, 也支持这种编程方式
面向编程里面的几个概念: 类, 对象, 属性, 方法,下面就用例子看一下如何实现

类, 对象(实例)

class Classname(object):

关键字class, 括号中的object表是Classname类继承的类, 默认都至少要继承一个叫object的类

比如要定义一个学生类:

class Student():
    pass

这里我们仅仅是定义了一个类, 并未做任何实际的工作

那如何使用一个类呢, 当然要实例化这个类了

s = Sutdent()
print s #<__main__.Student object at 0x7fb60ad6c450>

那这个s 其实就是这个类的一个对象(实例),

属性

这个其实就是类中的一些变量, 可以外部赋值, 也可内部定义, 假设我们外部定义某个Student实例的名字

s.name = \"Yi_Zhi_Yu\"
print s.name #Yi_Zhi_Yu

在类内部定义

class Student():
    name = \"Yi_Zhi_Yu\"
 
s = Sutdent()
print s.name #Yi_Zhi_Yu

方法

类的方法, 表示类的对象可以进行的操作

class Student():
    name = \"Yi_Zhi_Yu\"
    
    def set_name(self, name):
        self.name = name
   
    def get_name(self)
        return self.name
 #实例化
 s = Sutdent()
 s.set_name(\"Tony\")
 print s.get_name() #Tony

注意, 类中的每个方法定义的时候都至少要带一个参数 self, 他代表的是绑定的实例, 即方法中要操作的对象, 这个和PHP很不一样, 假如不带这个self 参数

def get_name()
        return \"Tony\" 
print s.get_name()    
#TypeError: get_name() takes no arguments (1 given)    

会报错, 还说已经传递了一个给get_name, 实际上这个1 given 就是对象, get_name中需要有个参数接收, 就是self, 所以实际上这个self也可以用其他名称代替, 因为他仅仅是个参数名

def get_name(m):
    return m.name      
print s.get_name() # Tony  

这个self也仅仅是在定义方法时带, 实际调用的时候要省略, 为什么的原因就是上面说的, 会自动传递进去

另外在说一个特殊的方法, 在实例化类的时候, 往往需要在实例的时候就执行某些操作, 在PHP中叫构造函数, 那python中呢: __init__

这里顺便把完成的类代码写下来

class Student():
    name = \"\"

    def __init__(self, name): #自然要带self
        self.name = name

    def set_name(self, name):
        self.name = name

    def get_name(m):
        return m.name
 
 s = Student(\"Yi_Zhi_Yu\")
 print s.get_name() #Yi_Zhi_Yu

模块与类

我们写好了上面的类, 文件名称叫student.py, 如何被其他模块引入呢
第一种方式

import student
s = student.Student(\"Yi_Zhi_Yu\")
print s.get_name() #Yi_Zhi_Yu

另一种方式

from student import Student
s = Student(\"Yi_Zhi_yu\")
print s.get_name()

其实, 第二种方式是用于引入某个模块的某些函数或类或变量, 而不是完全引入,比如, 我们在上面的student模块文件的Student类外层添加一个函数

def f_i_test():
      print \"Hello World\"

当我们需要这个模块中的这个函数,而不需要Student类的时候, 就可以使用

from student import f_i_test
f_i_test() #Hello World

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
项目管理和工程管理的区别 项目管理 项目管理,顾名思义就是专注于开发和完成项目的管理,以实现目标并满足成功标准和项目要求。 工...