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
类实例化后的object就是 实例对象
实例变量是每一个实例自己的变量,类变量是类的变量,是类的所有实例共享的属性和方法。
类属性保存在类的__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__可以找到