day18面向对象

面向对象编程   
什么是对象
    对象是指现实中的物体或实体

什么是面向对象
    把一切看成对象(实例)用各种对象之间的关系来描述事务

对象都有什么特征
    对象有很多属性(名词,形容词)
        姓名,年龄,性别
    对象有很多行为,(动作,动词)
        学习,吃饭,睡觉,踢球

什么是类
    拥有相同属性和行为的对象分为一组即为一个类
    类是用来描述对象的工具,用类可以创建此类的对象(实例)

类的创建语句 class语句
    语法:
        class 类名(继承列表)
        '''类的文档字符串'''
        实例方法
        类变量
        类方法(@classmethod)
        静态方法(@staticmethod)
    作用;
    创建一个类
    用于描述此对象的行为和属性
    类用类创建此类的一个或多个对象
    说明;
        类名必须是标识符
        类名实质是变量,它在创建类时绑定一个类

构建函数
    调用表达式
        类名([创建传参列表])
        作用;
            创建这个类的实例对象,并返回此实例对象的引用关系
        说明:
            实例有自己的作用域和名字空间,可以为该实例添加实例变量(也叫属性)

# constructor.py


class Dog:
    '''此语句用来定义一个新的类型 Dog'''
    pass


dog1 = Dog()  # 创建一个实例对象
print(id(dog1))
dog2 = Dog() # 创建 第二个实例对象
print(id(dog2))

lst1 = list()  # 创建一个列表对象
print(id(lst1))
lst2 = list()  # 创建第二个实例对象
print(id(lst2))

实例方法:(instance method)
    定义语法:
    class 类名(继承列表)
        def 实例方法名(self,形参列表)
            '''方法的文档字符串'''
            语句快
    作用:
        用于描述一个对象的行为,让此类型的全部对象都拥有相同的行为
    说明:
        1.实例方法的实质是函数,是定义在类内的函数
        2,实例方法至少有一个形参,第一个形参绑定调用这个方法的实例,
        一般命名为'self'
    实例方法的调用语法;
    实例.实例方法名(调用实参)
    或
    类名.实例方法名(实例,调用实参)

# instance_method.py

# 此示例用于示意为Dog类添加吃,睡,玩等实例方法,以实现Dog对象的相应行为
class Dog:
    """这是一种可爱的小动物"""
    def eat(self, food):
        '''此方法用来描述小狗吃的行为
        '''
        print("id为%d的"%id(self),end='')
        print("小狗正在吃", food)
    
    def sleep(self, hour):
        print("id为%d的小狗睡了%d小时" %
              (id(self), hour))

    def play(self, obj):
        print("id为%d的小狗正在玩%s" %
              (id(self), obj))
        # return 10 方法内可以用return返回一个引用

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

dog2 = Dog()  # 创建另一个对象
dog2.eat("狗粮")

dog1.sleep(1)
dog2.sleep(2)
dog1.play("")
dog2.play("飞盘")
Dog.play(dog2, "飞盘")  # 借助类来调用方法

实例属性:instance attribute
    每个实例都可以有自己的变量,称为实例变量(也叫属性)
示意语法:
    实例.属性名
赋值规则:
    首次赋值则创建此属性
    再次赋值则改变此属性的绑定关系
作用:
记录每个对象自身的数据

# instance_attribute.py


# 此示例示意创建和使用实例属性
class Dog:
    """这是一种小动物"""
    def eat(self, food):
        '狗吃东西的行为'
        print(self.color, '',
        self.kinds, '正在吃', food)
        # 以下让当前的小狗自己记住吃的是什么
        self.last_food = food

    def show_info(self):
        """显示信息"""
        print(self.color, "",
              self.kinds, '上次吃的是:',
              self.last_food)


dog1 = Dog()
dog1.kinds = "哈士奇"  # 创建属性
dog1.color = "黑白相间"  # 创建 属性color
dog1.color = "白色"   # 修改属性color
print(dog1.color, "", dog1.kinds)
dog1.eat("骨头")  # 白色的....

dog2 = Dog()
dog2.color = "棕色"
dog2.kinds = "藏獒"
dog2.eat("狗粮")

dog1.show_info()
dog2.show_info()

练习:
    定义一个人类
class Human:
    def set_info(self,name,age,address='不详'):
        '''此方法用来给人对象添加'姓名’,‘年龄’,和家庭地址‘属性'''
        self.name=name
        self.age=age
        self.address=address
       
    def show_info(self):
        '''显示此人的信息'''
        print('name:','age:','address:')
s1=Human()
s1.set_info('小张',20,'深圳市南山区')
s2=Human()
s2.set_info('小李',18)
s1.show_info()
s2.show_info()

del 语句用于删除实例属性
    语法;
        del 对象.实例变量
   
del 语句小结:
    1)删除变量
        del a,b,c
    2)删除列表中的元素
        del l[0]
    3)删除字典的键值对
        del d['score']
    4)删除对象的属性(不能删除方法)
        del obj.attr
初始化方法‘
    作用
        对新创建的对象添加属性
    格式:
        class 类名(继承列表)
            def __init__(self,形参列表)
                语句块
    说明:
        1.初始化方法必须为'__init__’不可改变
        2)初始化方法会在构造函数创建实例后自动调用,且将实例自身通过第一个参数self传入'__init__'方法
        3. 构造函数的实参将通过__init__方法的形参列表传入到'__init__'方法中
        4. 初始化方法必须返回None

# init_method.py


# 此示例示意初始化方法的定义及自动调用
class Car:
    def __init__(self, c, b, m):
        self.color = c  # 颜色
        self.brand = b  # 品牌
        self.model = m  # 型号
        print("初始化方法被调用")

    def run(self, speed):
        print(self.color, '',
              self.brand, self.model,
              "正在以", speed,
              '公里/小时的速度行驶')


a4 = Car("红色", '奥迪', 'A4')
a4.run(199)

t1 = Car("蓝色", "TESLA", "Model S")
t1.run(230)

练习:
    写一个学生类,student类,此类用于描述学生信息
    学生信息有:
        姓名,年龄,成绩(默认为0)
    1)为该类添加初始化方法,实现在创建对象时字典设置姓名,年龄,成绩
    属性,
    2)添加set_score方法,能对对象修改成绩信息
    3)添加show_info方法打印学生信息
class student:
    def __init__(self,name,age,score):
        self.name=name
        self.age=age
        self.score=score
    def set_score(self,score):
        self.score=score
    def show_info(self):
        print(self.name,self.age,self.score)
l=[]
l.append(student('小张',20,100))
l.append(student('小李',18))
l.append(student('小赵',19,85))
for s in l:
    s.show_info()
l[1].set_score(70)
print(self.name,self.age,self.score)

析构方法“
    class 类名(继承列表)
        def __del__(self))
        ...
    作用:
        在对象销毁前释放对象占用的资源
    说明;
        析构方法会在对象销毁前被自动调用
        python 语言建议不要在对象销毁时任何市区,因为销毁时间难以确定
    示例;del_method.py

预置实例属性(实例变量)
    __dict__属性
        此属性绑定一个存储此示例自身变量的字典
    示例:
        clas dog:
            pass
        dog1=dog()
        print(dog1.__dict__)
__class__属性
    __class__属性绑定创建此实例的类
    作用”
        可以借助于此属性来访问创建此实例的类
    示例:
        class dog:
        dog=dog()
        print(dog1.__class__)

用于类的函数:
    isinstance(obj,class_or_tuple)返回对象obj是否是某个类的对象或某些类的一个类的对象,如果是返回
    true,否则返回false
    type(obj) 返回对象的类型(类)
示例:
 示例:
  isinstance(100, int)  # True
  isinstance(3.14, int)  # False
  class Dog:
      pass
  dog1 = Dog()
  isinstance(dog1, Dog)  # True
  type(dog1) is Dog  # True   

猜你喜欢

转载自www.cnblogs.com/sky-ai/p/9750627.html
今日推荐