面对对象
1.类与对象
python中一切皆对象
创建类
class Student:
native_space='江苏'
def __init__(self,name,age):
self.name = name
self.age = age
def eat(self):
pass
@staticmethod
def sm():
pass
@classmethod
def cm(cls):
pass
创建对象
类的实例化,实例名=类名()
stu1 = Student('朱嘉骏',20)
动态绑定属性和方法
只想给某个实例化对象添加某个属性和方法,其他对象不受影响。
stu1.gender='男'
def show():
print('定义在类之外的函数')
stu1.show = show
2.面向对象的三大特征
-
封装 提高程序安全性,类是对属性和方法的封装。隔离了复杂度。 在方法或属性前面加两个_,这个属性只能在类内部实用,不希望被其他实例化对象使用(但是可提高dir(stu)查找到该方法并调用)。 -
继承 如果没有继承类,则默认继承object类。 python支持多继承, 定义子类时候必须在其构造函数调用父类的构造函数 class Person():
def __init__(self, name, age):
self.name = name
self.age = age
def info(self):
print('姓名:{0},年龄:{1}'.format(self.name, self.age))
class Student(Person):
def __init__(self, name, age, score):
super().__init__(name, age)
self.score = score
方法重写 子类要输出自己独有的,父类不能提供,子类要重写方法。 class Student(Person):
def __init__(self, name, age, score):
super().__init__(name, age)
self.score = score
def info(self):
super().info()
print(self.score)
object类 __str__方法,用于输出对象的描述,直接print(实例对象)默认调用该方法,所以经常对__str__方法重写,用于返回对象的描述 __dir__方法,输出对象的所有属性,内置函数dir()亦可 -
多态 可拓展性和可维护性 静态语言(java)多态,明确继承关系、方法重写、父类引用指向子类对象 动态语言(python)的多态崇尚鸭子类型 鸭子类型:不关心对象的父类是谁,只关心对象的属性方法。 -
特殊属性和方法 特殊属性:__dict__实例对象的属性字典,类对象的方法字典; __class__()对象所属的类,__bases__()父类,__base__()最近的父类,__mro__()类的层次结构,__subclasses__()子类的列表 -
方法 特殊方法:__add__是+的底层方法,可以通过改写子类的方法来改变该类实例对象的 **+**功能 __len__通过重写方法,让内置函数len()的参数可以是自定义类型 __new__创建对象 __init__对创建的对象初始化##########################课程117,没学完 -
类的浅拷贝 浅拷贝,python没有特殊说明都是浅拷贝 对象包含的子对象内容不拷贝,因此源对象和拷贝对象引用同一个子对象####没学完 -
深拷贝 递归拷贝对象中包含的子对象
|