[Python3]面向对象

面向对象

面向过程:核心是过程二字,过程指的是解决问题的步骤,设计一条流水线,机械式思维
优点:把复杂的问题流程化,进而简单化
缺点:可扩展性差

面向对象:核心是对象二字,对象就是特征与技能的结合体
优点:可扩展性强
缺点:编程复杂度高
应用场景:用户需求经常变化,互联网应用,游戏,企业内部应用

在现实世界中: 一定是先有对象,后有类
在程序中:一定得先定义类,后调用类来产生对象

类体的代码在定义阶段就执行
查看类的名称空间

类第一大类用途
对属性的操作 增删改查。类名.属性  类名.__dict__  字典类型
类第二大类用途
产生对象,实例化

# _author_:wyq
# _date_:2018/8/12
# 先定义类
class LuffyCity:
    school = 'luffycity'        # 类的数据属性

    def __init__(self, name, sex, age):
        self.Name = name
        self.Sex = sex
        self.Age = age
    def learn(self):
        print('is learning')    # 类的函数属性
    def eat(self):
        print('is eating')

    def sleep(self):
        print('is sleeping')


# 后产生对象
stu1 = LuffyCity('wangyq', '男', 26)
print(stu1.Name)
print(stu1.__dict__)

# 加上__init__方法后,实例化的步骤
# 1、先产生一个空对象stu1
# 2、LuffyCity.__init__(stu1, 'wangyq', '男', 26)

# 增
stu1.class_name = 'python'
# 删
del stu1.Name
# 改
stu1.Name = 'wyq'
# 查
stu1.__dict__
stu1.Name


对象:特征和技能的结合体
类:是一系列对象相似的特征和相似的技能的结合体
# 先定义类
class LuffyCity:
    school = 'luffycity'        # 类的数据属性

    def __init__(self, name, sex, age):
        self.Name = name
        self.Sex = sex
        self.Age = age
    def learn(self):
        print('%s is learning' % self.Name)    # 类的函数属性
    def eat(self):
        print('%s is eating' % self.Name)

# 后产生对象
stu1 = LuffyCity('wangyq', '男', 26)
stu2 = LuffyCity('wyq', '男', 25)

# 类中的数据属性:所有对象共有的
print(LuffyCity.school)
print(stu1.school)
print(stu2.school)


stu1.Name 等同于stu1.__dict__['Name']

# 类中的函数属性:是绑定给对象使用的,绑定到不同的对象是不同的绑定方法,
# 对象调用绑定方法时,会把对象本身当成第一个参数传入,传给self

在stu1.name 会先从stu1自己的名称空间里找name,找不到则去类里找,类里找不到就找父类,最后都找不到就抛出异常。

stu1.learn()
stu2.learn()

__init__方法:该方法是在对象产生之后才会执行,之用来为对象进行初始化操作,可以有任意代码,但一定不能有返回值

强调:绑定到对象的方法的特殊之处在于,绑定给谁就由谁来调用,谁来调用,就会将‘谁’本身当做第一个参数传给方法,即自动传值(方法__init__也是一样的道理)

注意:绑定到对象的方法的这种自动传值的特征,决定了在类中定义的函数都要默认写一个参数self,self可以是任意的名字,但约定俗成地写成self。

python当中 一切皆对象。在python3里统一了类与类型的概念,类型就是类。
站的角度不同,定义出的类是截然不同的。
现实中的类并不完全等于程序中的类,比如现实中的公司类,在程序中优势需要拆分成部门类,业务类等。
有时为了编程需求,程序中也有可能会定义现实中不存在的类,比如策略类,现实中并不存在,但在程序中却是一个常见的类。
 

猜你喜欢

转载自blog.csdn.net/TynMhxx/article/details/81610458