面向对象

会用,会写,即可.解释都是官方的 .实际中编码的思想都是面向过程的.

面向--->过程 :从过程的角度来考虑问题.是大锅饭的模型,国有化
好处:容易理解一步接一步,环环相扣.适合做小型的开发
坏处:耦合性强,不利于团队开发.重复代码多.

面向--->对象:利于团队开发,降低耦合度.分田到户了,私有化了
换了称呼了,方法,属性,对象,实例
每个人出来的抽象的东西不一样
棋盘(刷新界面,显示棋子),棋手(下棋),计算系统(判断胜负).谁出了问题就找谁
降低耦合性,依赖性
对象:属性-->变量,方法-->函数 (对象--->过程的对应关系)
这些功能函数属于某个对象
对象.方法 函数是公有的, 方法是私有的.

还是有一定的耦合性,只是降低了耦合性
优点:将数据和业务抽象为对象,有利于程序整体结构的分析和设计,使设计思路更加清晰
缺点:不好理解

对象:
  承载数据,执行操作的一个具体事物.有一些是看的见的有一些是我们抽象出来的(五子棋的计算系统)

对象的组成: 1.保存数据的叫属性,类似面向过程中的变量   2.实现操作,行为,功能的叫方法.类似面向过程的函数.对象只由这两个部分组成

类名:大驼峰命名
类:物以类聚,人以群分.存在相同的操作行为.用来描述多个对象共同行为的集合.
通过类来描述对象的属性和方法.类里面来定义对象的属性和方法.
类是一个对象的集合

类和对象的关系:类是创建对象的模板.或者说是 制造手册.类总结了对象的共同特征.用来定义对象的公共行为.

每个对象必须有一个类.有对象之前必须有类.但是细究下去,说不清楚.

比如:飞机图纸就是一个类,根据这个就可以早出许多飞机(对象)

模板 ---- > 类

真正实现行为的是对象.类只是来描述对象的行为方法.

想要有类,先要心中有一个对象.即将看到的物体抽象成一个对象,然后才能有类.

类中既可以有属性,也可以有方法.

# 类和方法只会执行一次
class Dog:
    """定义狗类"""

    def drink(self):  # 方法会自动添加一个形参self,在类的里面.self:位置参数,必须给一个实参   编程中原则:  谁制造,谁使用
        print(self)  # <__main__.Dog object at 0x0000018ABAE7B208>
        print('喝点江小白')

    # print(self)


# 创建对象  有一个返回值,拿个变量接收一下
dog1 = Dog()  # 实际上是一个全局变量,这里我们将保存一个对象的变量称之为dog1对象
dog1.drink()  # 对象.方法()       Pycharm提示:    v:变量 variable,f:函数 function,m:方法 method c:类 class
print(dog1)  # <__main__.Dog object at 0x0000018ABAE7B208>

# print(self)和print(dog1)的值一样了. 这样就说明self就是dog1
# 调用方法时不需要手动添加实参,解释器会自动添加一个实参给形参(位置参数)

定义属性:

class Dog:
    """定义了一个Dog类"""
    def eat(self):
        print('吃鸡')
        # print(self)  # 如果在eat()方法中不调用self参数,eat()会提示:警告eat()可能是一个static静态方法.


dog1 = Dog()
dog1.eat()

a = 10  # 给一个变量赋值
print(a)  # 调用(输出)这个变量的值

# 格式:对象.属性 = 值  首次给属性赋值叫定义属性(创建属性)
dog1.name = 'xiaowang'  # 定义属性
dog1.name = 'xiaowang11'  # 修改属性的值,这两个是同一个属性,只是值不一样了
print(dog1.name)

dog1.age = 2
print(dog1.age)

创建多个对象:

class Dog:
    def drink(self):
        print('喝娃哈哈')

    def eat(self):
        print('吃排骨')


# 类中定义的方法会被此类创建出来的所有对象共享
dog1 = Dog()  # <__main__.Dog object at 0x000002481333B8D0> 写一次就是一个新的对象.内存地址值肯定不一样
dog2 = Dog()  # <__main__.Dog object at 0x000002481333BAC8>写一次就是一个新的对象.内存地址值肯定不一样
print(dog1)
print(dog2)

dog1.drink()
dog2.drink()

# 方法是共有的,但是属性是每一个对象所独有的,各自记录各自的数据
dog1.name = 'xiaohei'
dog2.name = 'xiaohua'
# 两个同类型的对象,可以有同名的属性,互不影响.同名的属性是各自记录各自的数据.私有的
print(dog1.name)
print(dog2.name)

dog1.age = 2

# 类:前后空2行  类在第一行时不用这么写

关于self:

"""
self代表类创建出来的某个对象.在调用方法时,会将调用此方法的对象作为第一个实参传递给self,在方法中使用对象属性时,尽量使用self去操作属性

self在方法外面时,无法使用.需要使用对象.

"""

class Dog:
    def eat(self):  #在方法中操作对象的属性时,尽量使用self.在类中操作对象的属性的时候也是这样.注意是在同一个类.
        # print('%s吃面包' % dog1.name)
        print('%s吃面包' % self.name)  # self:谁使用就是谁,self是一个特殊的形参.这里的self.name就是Dog类的属性,在创建对象之后对属性进行赋值.所以下面name='小花'


dog1 = Dog()
dog1.name = '小花'
dog1.eat()

dog2 = Dog()
dog2.name = '小白'
dog2.eat()  # 调用方法时,Python解释器会自动把调用此方法的对象作为第一个实参传递给self
原文地址:https://www.cnblogs.com/huaibin/p/12097146.html