(D17)Python-面向对象编程

版权声明:转载请声明 https://blog.csdn.net/dirckes8813/article/details/83417119

面向对象编程 Object Oriented Programming


两种编程思想:

  • 面向过程编程
  • 面向过程思想:
    • 最小单位:函数 function
  • 面向对象编程:
    • 最小单位:类 class

什么是对象?

  • 对象是指现实中的物体或者实体

什么是面向对象?

  • 把一切看成对象(实例) 用各种对象之间的关系描述事物

对象都有什么特征?

  • 对象有很多属性(名词、形容词)
  • 对象有很多行为(动作,动词)

什么是类?

  • 拥有相同属性和行为的对象分为一组
  • 类是用来描述对象的工具

类的创建语句:

  • 语法:
    • class 类名(继承列表):
      • ‘’‘ 类的文档字符串’‘’
      • 实例方法(类的函数mothod)定义类的变量
      • 类方法(@classmethod)
      • 静态方法(@ststicmethod)
    • 作用:
      • 创建一个类
      • 类用于描述对象属性和行为
      • 类用于创建此类的一个或者多个对象
    • 说明:
      • 类名必须是标示符
      • 类名实质是一个变量

示例1:

class Dog:
    def eat(self,food):
        print('小狗正在吃',food)

dog1 = Dog()
dog1.eat('骨头')


实例方法(instance merhod)

  • 定义格式:

    • class 类名(继承列表):
      • def 示例方法名(self。参数1,参数2。。。)
        • 语句块
    • 作用:
      • 用于描述一个对象的行为,让此类型的全部对象都拥有相同的行为
    • 说明:
      • 实例方法的实质是函数,定义在内类的函数
      • 实例方法至少有一个形参,第一个形参代表调用这个方法的实例,一般命名为’self’

    实例方法的调用语法:
    实例.实例方法名(调用传参):

    类名.实例方法名(实例,调用传参)

示例2:

class Dog:
    def eat(self,food):
        print('小狗正在吃',food)
    def sleep(self,hour):
        print('吃完了要睡',hour,'小时')

dog1 = Dog()
dog1.eat('骨头')
dog1.sleep('3')
dog2 = Dog()
dog2.sleep('5')

实例属性:(attribute 实例变量)

  • 每个实例都可以用自己的变量来记录每个对象自己的数据,把这个变量称为实例变量
  • 使用语法:
    • 实例.属性名
  • 赋值规则:
    • 首次属性赋值择创建此属性
    • 再次赋值择改变此属性的绑定关系
  • 作用:
    • 记录每个对象自身的数据

示例3:

class human:
    def set_info(self,name,age,address='不详'):
        self.name = name
        self.age = age
        self.address =address

    def show_info(self):
        print(self.name,'今年',self.age,'岁','家住',self.address)



s1 = human()
s1.set_info('小张',20,'北京市东城区')
s2 = human()
s2.set_info('小李','18')
s1.show_info()
s2.show_info()

删除属性:

  • del 对象.实例变量名

del语句总结:

  • 1)删除变量
  • 2)删除列表中的元素
  • 3)删除字典中的键
  • 4)删除属性

初始化方法

  • 作用:
    • 对象创建的对象添加属性
  • 语法格式:
    • class 类名
      • def__init__(self[,形参列表])
        • 语句块
    • 说明:
      • 初始化方法得名必须是‘init’不可改变
      • 初始化方法会在构造函数 创建实例后自动调用且将实例自身通过飞一个参数self传入‘init’方法
      • 构造函数的实参将通过__init__方法的参数列表传入到init方法中
      • 初始化方法内如果需要return语句返回择只能返回none

示例4:

class student:
    def __init__(self,name,age,sorce=0):
        self.name = name
        self.age = age
        self.sorce = sorce 
    def set_sorce(self,sorce):
        if 0 <= sorce <= 100:
            self.sorce = sorce
        else:
            print('不在范围内')

    
    def show_info(self):
        print(self.name,'今年',self.age,'岁','成绩',self.sorce)


L = []
L.append(student('小张',20,100))
L.append(student('小李',18,95))
L.append(student('小钱',20))
L[-1].set_sorce(70)
for s in L:
    s.show_info()

析构方法:

  • 格式:
    • class 类名(继承列表)
      • def del(self):
        • 。。。
  • 作用:
    • 在此对象销毁前释放次对象占用的资源
  • 说明:
    • 析构方法会在对象销毁时自动调用
    • python 语句建议不要在对象销毁时做任何事情,因为销毁时间难以确定

示例5:

class Car:
    def __init__(self, name):
        self.name = name
        print("汽车", name, '对象被创建')
 
    def __del__(self):
        print("汽车", self.name, '对象被销毁')
 
c1 = Car("BYD E6")
# del c1
# L = []

预置的实例属性

dict 属性

  • __dict__属性绑定一个存储此实例自身变量的字典

示例6:

  class Dog:
      pass

  dog1 = Dog()
  print(dog1.__dict__)  # {}
  dog1.color = "白色"
  print(dog1.__dict__)  # {'color':'白色'}

__class__属性

  • __class__属性绑定创建此实例的类
  • 作用:
    • 可以借助此属性来访问创建此实例的类

示例7:

class Dog:
    pass
dog1 = Dog()
print(dog1.__class__)
dog2 = dog1.__class__()
print(dog2.__class__)

用于类的函数:

  • isinstance (obj,class_or_tuple)
    • 返回这个对象obj是否是类的对象,或者某些类中的一个类对象
    • 如果是则返回True,否则返回Flase
  • type(obj) 返回对象的类

综合练习


有两个人:
    1.  姓名:张三
        年龄:35岁
    2.  姓名:李四
        年龄:8岁
行为:
    1.教别人学东西  teach
    2.工作赚钱  work
    3.借钱  borrow
用程序描述如下事情:
    张三  教  李四  学  python
    李四  教  张三  学  滑冰
    张三  上班  赚了  1000元钱
    李四  向  张三  借了  200元钱
    显示李四的全部信息
    显示张三的全部信息

代码:


class Human:
    def __init__(self, name, age):
        self.name = name  # 姓名
        self.age = age  # 年龄
        self.money = 0  # 钱数
        self.skill = []  # 技能
 
    def teach(self, other, skl):
        other.skill.append(skl)  # other得到了技能
        print(self.name, '正在教', other.name,
              '学', skl)
 
    def work(self, money):
        self.money += money
        print(self.name, '上班赚了', money, '元钱')
 
    def borrow(self, other, money):
        '''借钱成功返回True,失败返回False'''
        # 先判断other有没有钱借
        if other.money > money:
            other.money -= money
            self.money += money
            print(other.name, '借给了',
                  self.name, money, '元钱')
            return True
        print(other.name, '没借给', self.name)
        return False  # 借钱失败
 
    def show_info(self):
        print(self.age, "岁的", self.name,
            '有技能:', self.skill, ',钱包内的钱数是',
            self.money)
 
zhang3 = Human("张三", 35)
li4 = Human('李四', 8)
zhang3.teach(li4, 'python')
li4.teach(zhang3, '滑冰')
 
zhang3.work(1000)  # 张三 上班 赚了 1000元钱
li4.borrow(zhang3, 200)  # 李四 向 张三 借了 200元钱
 
zhang3.show_info()
li4.show_info()

猜你喜欢

转载自blog.csdn.net/dirckes8813/article/details/83417119
今日推荐