Objects

Sorts of Program Languages

Machine Orinted

机器指令

汇编语言

Procedure Orinted

按照步骤和分支处理

C

Object Orinted

多人、多部门写作

C++ Java Python

  • Python 中一切皆对象,面向对象做得非常彻底

  • 对象是数据和操作的封装

  • 对象是独立的,但对象之间可以互相作用

  • 目前OOP是最接近人类认知的编程范式。

OOP

描述数据——Property

Action——Method

class

collection of profiles

类中没有函数,都叫方法。

instance object

OOP三要素:

1、封装:

组装、封闭。

数据的隐藏。

2、继承:

多复用

多继承少修改,OCP(Open-closed Principle)

3、多态:

动态绑定。Python几乎不存在

Python的class

class MyClass:

   """A example class"""

   x = 'abc'   #类属性

   def foo(self):  foo 是method object

       print(self.x) self,不要换,将类的实例本身作为方法参数传入

print(MyClass)

print(MyClass.__name__)

print(MyClass.x)

print((MyClass.foo))

<class '__main__.MyClass'>

MyClass

abc

<function MyClass.foo at 0x00000000011CB840>

‘.’是用来找成员的

.__dict__ 可以获取包含MyClass的全部属性的dict,包括有我们定义的

x变量

__doc__:"""A example class"""

foo方法

还有缺省的__module__:__main__

__init__方法等属性

类对象及类属性

  • 类对象,定义一个类,它就是一个类对象type class

  • 类的属性,定义中的变量和方法都是类的属性。 都属于类的标示符

  • 类变量,上例中x是类MyClassd的变量

foo是methond方法对象,不是普通的fucntion了,必须至少有一个参数,且第一个参数必须是self。

self指代当前实例本身

mycls = MyClass() # 实例化,初始化

print(mycls.foo()))

print(mycls.x)

print(mycls.foo)

abc

None

abc

<bound method MyClass.foo of <__main__.MyClass object at 0x00000000011E57F0>>

print(MyClass)

  • 实例化

a = MyClass()

类对象后面加上(),就调用类的实例化方法,完成实例化。

Python 类实例化后,会自动调用__init__方法,这个方法第一个参数必须留给self。

def __new__ 实例化

  • __init__方法

__init__(self),初始化方法,又叫构造器,构造方法,

已经构造完成

只能返回None,

  • instance

  1. 类实例化后的object就是 实例对象

  2. 实例变量是每一个实例自己的变量,类变量是类的变量,是类的所有实例共享的属性和方法。

  3. 类属性保存在类的__dict__中,实例属性保存在实例的—__dict__中,如果从实例访问类的属性,需要借助__class__找到所属的类。

__qualname__

类类型实例才有限定名__qualname__,不等于name

__dict__属性集合

实例属性的查找顺序

函数的对象操作都是一样的

首先翻看一下自己的dict,然后通过属性__class__找自己的类再去类的dict中找。

装饰一个类

调用类用__xxxx__

  • 是类的就是大家的。

  • 如果不带参,就用@staticmethod

def staticmtd():

print('static')

访问控制 public protect private

Private Property 私有属性

在实例的__dict__中可以用_Person__age查找,因为解释器改名

Protect Property

_name 是开发者的约定,不要改

Private Method 私有方法, 与私有变量类似

在类的__dict__可以找到