2018-04-14 开胃学习Python系列 - Object Class 基础

Python也是oop,虽然函数在Python生态系统中扮演重要角色。Python确实具有类别(classes) 可以有附加的方法(method),并被具现化为物件(object)。

实际上,虽然将在Python中使用很多object, 但是当使用interactive 环境时,我们不太可能会创建新的class,因为有点太详细冗长。






首先,我们是可以定义一个class,使用class关键字,并以冒号结尾。我几乎没有这么做过,但是我写这一篇的原因就是因为我第一次见到了self这个写法。因为大多时候做一些简单的数据出来,我没有用python创建过class,所以之前也没有写过self,和init。但这两个用法都基本是只要熟悉了就好了。

class Person:
    department = 'School of Information' 
#a class variable

    def set_name(self, new_name): #a method
        self.name = new_name
    def set_location(self, new_location):
        self.location = new_location​

class

  • 缩进于此,在class的范围
  • Python中class的名称一般称使用camel大小写, 每个单词的第一个字元用大写。
  • 不需要在物件中声明变数,您只需开始使用它们。
  • 此外class的变数可以被声明。这些只是在所有实例(instances)之间共享的变数。

方法(method)

  • 像写函数(function)一样。
  • 不同的是,要能够使用实例,在其中这一方法中被援引的,必须在方法的签名中包含self.
  • 不同的是,要能够使用实例,在其中这一方法中被援引的,必须在方法的签名中包含self.
  • 不同的是,要能够使用实例,在其中这一方法中被援引的,必须在方法的签名中包含self.
  • 同样,如果想引用实例变数设置在object上的, 要将self放在方法名字的前头,加上句号 self.

例如,在此定义中,写了两种方法(method)。
设置名称和设置的位置。这两个变化实例绑定的变数,分别称为名称和位置。






调用它的函数功能,列印出class属性,使用 点标记法(dot-notation)

person = Person()
person.set_name('Christopher Brooks')
person.set_location('Ann Arbor, MI, USA')
print('{} live in {} and works in the department {}'.format\
(person.name, person.location, person.department))
>>> Christopher Brooks live in Ann Arbor, MI, USA and works in the department School of Information
  • 在Python中的物件不具有私有或受保护成员。如果实例化一个类, 对该实例的任何方法或属性有完全存取权。
  • 不需要 用显式的构造函数(constructor),当创建Python的object。如果你想要,你可以添加一个建构函式 _init_ method,通过声明 双底线的方法。






  • Map函数是Python中函数程式语言的基础之一。函数程式语言是一种程式范例,您在其中明确声明 所有可以通过执行给定函数而改变的参数。
  • Python并不是纯粹的函数程式语言。因为有很多函数的副作用,并且不一定非 传递一切参数。

But functional programming causes one to think more heavily while chaining operations together. And this really is a sort of underlying theme in much of data science and date cleaning in particular. So, functional programming methods are often used in Python, and it's not uncommon to see a parameter for a function, be a function itself. The map built-in function is one example of a functional programming feature of Python, that I think ties together a number of aspects of the language. The map function signature looks like this. The first parameters of function that you want executed, and the second parameter, and every following parameter, is something which can be iterated upon.

map内置功能是Python的函数程式语言功能的一个例子

  • 第一个参数是你想要执行的函数,第二个参数, 和下面的每个参数,是可以反覆运算后的东西。
  • 所有可反覆运算的参数都解开在一起, 传递到给定的函数。这就是有点神秘,
  • 所以让我们来看一个例子。假设我们有两个数字列表, 也许从两个不同的商店的价格,完全相同的项目。我们想找到我们必须支付的最低价, 如果我们在两家商店之间买到便宜的商品。要做到这一点,我们可以将遍历每个列表,比较项目和 选择最便宜的。用map,我们可以做这种简单的比较。
store1 = [10.00, 11.00, 12.34, 2.34]
store2 = [9.00, 11.10, 12.34, 2.01]
cheapest = map(min, store1, store2)
cheapest
>>><map at 0x7f18301726d8>

for item in cheapest:
    print(item)
#output
>>>
9.0
11.0
12.34
2.01
  • 但是,当我们去print出来,我们看到奇怪的参考值<map at 0x7f18301726d8> 而不是我们期待的项目列表。这被称为懒惰评估。
  • 在Python中,map函数返回给你一个map物件(object)。实际上并没有尝试在两个项目上运行min函数,直到我们查看里面的值。这是一个有趣的语言设计模式。这使得我们有非常有效的记忆体管理 即使是复杂的计算。
  • map是可以反覆运算,就像列表和元组,因此我们可以使用for回圈 来查看map中的所有值。
People = ['Dr. Christopher Brooks', 'Dr. Kevyn Collins-Thompson', 
'Dr. VG Vinod Vydiswaran', 'Dr. Daniel Romero']

def split_title_and_name(person):
    return person.split(' ')[0] + person.split(' ')[2]

list(map(split_title_and_name, people))
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Python 面向对象Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对...
    顺毛阅读 9,666评论 4 16
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,323评论 19 139
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 5,808评论 0 9
  • 庭树尚青春,故人今安好。 老死不往来,形同如陌路。 年少归云烟,云烟皆散尽。 夜雨淋芭蕉,容易莫相知。 思量不思量...
    新荷叶阅读 3,405评论 0 1
  • 2018年亲密关系共修功课第七天:看到自己在婚姻中的功课,给这个功课评级打分,然后去找到提升它的方法。 引导:夫妻...
    豆豆妈妈_68cd阅读 2,523评论 2 1