小李飞刀:python你在前面飞,欲饮琵琶立刻催

叨叨点啥

2018年的最后一天。
回顾这一年,得到不少也失去不少。
今年去了不少的地方,成都,重庆,峨眉山,天津,杭州,南京。
杭州是我特别喜欢的城市,有不少美好的记忆,也有不少失落的时刻。
南京如今算是个人一个治愈城市了,带着重重的悲伤去,幸亏落雪的瞬间将我治愈。
今年努力回温了不少次的这两年,发现不少事情都在最先的时候就有预知,我能够努力作好的事情却没有作到,这就是为何我会背负悲伤的缘由。
2019年,要更加努力,想作到的事情就必定要作到。
而后祝福我爱的人,一切都好。
但愿有缘,还能再度相见吧。编程

2019年,世界和平,平安喜乐。函数

认真学习的分割

恩今天的鸡血针剂,仍是用同一管吧~
每个优秀的人,都有一段沉默的时光。那一段时光,是付出了不少努力,忍受孤独和寂寞,不抱怨,不诉苦,往后提及时,连本身都能被感动的日子。学习

面向对象编程

类和实例

面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记 类是抽象的模板,好比Student类,而实例是根据类建立出来的一个个具体的“对象”,每一个对象都拥有相同的方法,但各自的数据可能不一样。

class关键字来定义类。
定义好后就能够建立实例,而后后自由的给一个实例变量绑定属性。code

由于类能够起到模板的做用,因此在建立实例的时候,能够绑定一些必要的属性。用__init__方法。对象

class Student(object):

    def __init__(self, name, score):
        self.name = name
        self.score = score
注意到 __init__方法的第一个参数永远是 self,表示建立的实例自己,所以,在__init__方法内部,就能够把各类属性绑定到self,由于self就指向建立的实例自己。

数据封装

访问实例的数据的时候,由于数据自己就属于实例,因此就不须要外部数据去访问。
在类的内部定义好这些访问数据的函数,就能够“封装”数据了——类的方法。继承

class Student(object):

    def __init__(self, name, score):
        self.name = name
        self.score = score

    def print_score(self):
        print('%s: %s' % (self.name, self.score))
bart = Student()
bart.print_score() #自带的函数,调用的时候很方便,不须要知道内部数据的定义

访问限制

为了让内部属性不被外部访问,就在属性的名称前__(2个下划线),而后就变成了私有变量。字符串

class Student(object):

    def __init__(self, name, score):
        self.__name = name
        self.__score = score

    def print_score(self):
        print('%s: %s' % (self.__name, self.__score))

这样外部就不能访问__name__score了,由于外部代码不能随意修改对象内部的状态,代码健壮多啦!
若是涉及到须要外部代码修改或者访问私有变量的话,能够在类里面增长方法。
这样在传参以前能够先作验证,保证传入的参数可用。it

须要注意的是,在Python中,变量名相似__xxx__的,也就是以双下划线开头,而且以双下划线结尾的,是特殊变量,特殊变量是能够直接访问的,不是private变量。

有些时候,你会看到以一个下划线开头的实例变量名,好比_name,这样的实例变量外部是能够访问的,可是,按照约定俗成的规定,当你看到这样的变量时,意思就是,“虽然我能够被访问,可是,请把我视为私有变量,不要随意访问”。面向对象编程

继承与多态

继承就是从现有的类进行继承,被继承的为超类或者父类(Base class、Super class)(也就是爸爸),新的类为子类(Subclass)。模板

class Animal(object):
    def run(self):
        print('Animal is running....')
#如下为两个子类
class Dog(Animal):
    pass
    
class Cat(Animal):
    pass

当子类和父类都存在相同的方法的时候,子类的方法覆盖了父类的,在代码运行的时候,老是会调用子类的方法,这就是多态。
在子类建立实例的时候,不只具有了子类的数据类型,一样也继承了父类的数据类型,因此子类的实例可能存在多个数据类型。
但反过来的规则则不成立。

对于一个变量,咱们只须要知道它是Animal类型,无需确切地知道它的子类型,就能够放心地调用run()方法,而具体调用的run()方法是做用在Animal、Dog、Cat仍是Tortoise对象上,由运行时该对象的确切类型决定,这就是多态真正的威力:调用方只管调用,无论细节,而当咱们新增一种Animal的子类时,只要确保run()方法编写正确,不用管原来的代码是如何调用的。这就是著名的“开闭”原则:
对扩展开放:容许新增Animal子类;
对修改封闭:不须要修改依赖Animal类型的run_twice()等函数。

静态语言vs动态语言

动态语言的“鸭子类型”。
静态语言不限制传入的类型,只须要保证传入的对象有相应的方法便可。
Python的“file-like object“就是一种鸭子类型。
这个还蛮特别的...(碎碎念)

获取对象信息

emmm....再次对标题陷入沉思
了解对象是什么类型,有哪些方法的操做

  • 使用type()

基本类型均可以用type()来判断,包括变量指向函数或者类。
type()函数返回对应的Class类型。

  • 使用isinstance()

能用type()判断的基本类型也能够用isinstance()判断,而且还能够判断一个变量是不是某些类型中的一种。

  • 使用dir()

若是要得到一个对象的全部属性和方法,可使用dir()函数,它返回一个包含字符串的list。

祝你们新年快乐~~

相关文章
相关标签/搜索