摘要:面向对象编程的思想在很多语言中都已经很成熟了,在里,也支持这种编程方式面向编程里面的几个概念类,对象,属性,方法,下面就用例子看一下如何实现类,对象实例关键字括号中的表是类继承的类,默认都至少要继承一个叫的类比如要定义一个学生类这里我们仅仅
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
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/37576.html
摘要:面向对象编程之旅编程是什么大家好,作为小白,最近学习了很多编程的知识,因为脑容量有限,特此一一按照学习顺序记录下来,如果哪里有错误,还请大神尽快指出,以免误导他人。。。继承也允许把一个派生类的对象作为一个基类对象对待。 Python面向对象编程之旅 OOP编程是什么 大家好,作为小白,最近学习了很多Python OOP编程的知识,因为脑容量有限,特此一一按照学习顺序记录下来,如果哪里有...
摘要:与的特点比较这两个目前都是小众语言做了些时间的研究写了点东西有了点心得相似点有卫生宏区别与的不卫生宏在类或定义体之外定义函数代码没有分成头与实现体例如的头与实现的与定义的接口定义与实现定义是分开的而与是不分开的运用函数式编程高阶函数目前是新 nim与rust的特点比较 这两个目前都是小众语言,做了些时间的研究,写了点东西有了点心得 相似点: 有卫生宏.区别与C++的(不卫生)宏 在类...
摘要:在对象接口后包装其实现的细节,从而隔离了代码的修改对用户产生的影响。类提供了一个新的本地作用域,最小化了变量名冲突。类其实并没有结束,不过本讲座到此对类暂告一段。 前面对类的有关内容已经描述不少了,其实话题远远没有结束,不过对于初学者,掌握这些已经算是入门,在以后的实践中,还需要进行体会和感悟。 这几天和几个朋友以各种途径讨论过OOP的相关问题,他们是:令狐虫、Frank、晋剑、小冯...
摘要:它的目标就是在不减慢你编程速度的前提下,帮助你来编写简洁而又正确的代码。对于这种情况,我们就需要有条件来控制某些属性不能为非法值。所以,一定要在里面某个错误。 使用attrs解放双手 大家好,这一期我想和大家分享一个OOP编程的高效神器:attrs库 首先我们来介绍下 attrs 这个库,其官方的介绍如下: attrs 是这样的一个 Python 工具包,它能将你从繁综复杂的实现上解脱...
阅读 3062·2021-11-24 10:34
阅读 3322·2021-11-22 13:53
阅读 2629·2021-11-22 12:03
阅读 3597·2021-09-26 09:47
阅读 3005·2021-09-23 11:21
阅读 4771·2021-09-22 15:08
阅读 3289·2021-07-23 10:59
阅读 1257·2019-08-29 18:31