一、面向对象
1、封装:
1、组装:将数据和操作(即属性和方法)组装到一起
2、隐藏数据:对外只暴露一些接口,通过接口访问对象
2、继承:
1、多复用,继承的便不用自己写了
2、多继承少修改,OCP-----减少冗余,增加复用
3、多态:
python不太需要了解
二、Python的类
1、定义:
1、必须使用class关键字
2、类名必须是大驼峰
3、类定义完成后就产生了一个类对象,绑定到了ClassName上
class MyClass: #定义一个类
"""A example class"""
x = 'abc' #类属性
def foo(self): #类方法,self自带
return 'My Class'
print(MyClass.x)
print(MyClass.foo)
print(MyClass.__doc__)
三、类对象及类属性
1、类对象,类的定义就会生成一个类对象
2、类的属性,类定义中的变量和类中定义的方法都是类的属性
3、类变量,x是MyClass的变量
MyClass中,x和foo以及__doc__都是类的属性
foo是method方法对象,不是普通的function,它必须至少一个参数,第一个必须是self。
self纸袋当前实例本身
4、实例化:a = MyClass( )
5、__init__方法
Python类实例化后,会自动调用__init__方法,这个方法第一个参数必须是self
MyClass( )实际上调用的是__init__(self)方法,可以不定义,如果没有会在实例化后隐式调用
作用:对实例进行初始化
class MyClass:
def __init__(self):
print('init')
a = MyClass() #这个就会调用__init__
初始化函数可以多个参数,第一个位置必须给self
class Person:
def __init__(self,name,age):
self.name = name
self.age = age
def showage(self):
print('{} is {}'.format(self.name,self.age))
tom = Person('Tom',20) #实例化
jerry = Person('Jerry',25)
print(tom.name,jerry.age)
jerry.age += 1
print(jerry.age)
jerry.showage() #调用方法
__init__()方法不能有返回值,也就是只能是None
6、实例对象instance
类实例化后一定会获得一个对象,就是一个实例对象,tom,jerry都是Person的实例
__init__方法的第一参数self就是指代某一个实例
classMyClass:
def__init__(self):
print('self in init = {}'.format(id(self)))
c=MyClass()
print('c = {}'.format(id(c)))--------->实例化会把c送到self的位置
7、实例变量和类变量
classPerson:
age=3
def__init__(self,name):
self.name=name
tom=Person('Tom')
jerry=Person('Jerry')
print(tom.name,tom.age)
print(jerry.name,jerry.age)
print(Person.age)
Person.age=30
print(Person.age,tom.age,jerry.age)
实例变量是每一个实例自己的变量,是自己独有,类变量是类的变量,是类的所有实例共享的属性和方法
8、
特殊含义含义
__name__对象名
__class__对象的类型
__dict__对象的属性字典
__qualname__类的限定名
举例:
classPerson:
age=3
def__init__(self,name):
self.name=name
print(Person.__class__)
print(sorted(Person.__dict__