python开发day17 面向对象

Day17笔记

面向对象编程

Object-oriented programing

 

 

对象的意义

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

面向对象的意义

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

对象的特征

1.对象有很多属性(名词)

姓名,性别,年龄,…

2.对象有很多行为(动作,动词)

   学习,吃饭,睡觉,工作,….

 

示意

车(类)----àBYD e6  (京A.88888)    (实例,对象)

      \

       \----àBWM x5  (京B.6666)     (对象)

狗(类)---à 京巴 (户籍号:000001

       \

        \----à 导盲犬 (户籍号:000002

 

 

意义

1.拥有相同属性和行为的对象分为一组,即为一个类

2.类是用来描述对象的工具,用类可以创建此类的对象(实例)

类的创建语句

Class语句

语法

作用

Class 类名(继承列表)

实例方法定义

类变量定义

类方法定义(@classmethod

静态方法定义(@staticmethod

创建一个类

用于描述对象的行为和属性

用于创建此类的一个或多个同类对象(实例)

说明

 

1.继承列表可以省略,省略继承列表表示类继承自object

2.类名必须为标识符

3.类名实质上是变量,他绑定一个类

 

 

 

 

示例

 

 

#定义一个简单的类

class Dog:

    '''这个类用于描述一种小动物的行为和属性'''

    pass

dog1 = Dog() #创建一个新的Dog类的对象

print(id(dog1))#打印这个对象的id

dog2 = Dog()#创建另外一个新的Dog类的对象

print(id(dog2))

#对比

lst1 = list()#创建一个空列表

print(id(lst1))

lst2 = list()#创建另外一个空列表

print(id(lst2))


构造函数

意义

构造函数调用表达式

类名([创建传参列表]

作用

创建这个类的实例对象,并返回此实例对象的引用关系

实例说明

1.实例有自己的作用域和名字空间,可以为该实例添加实例变量(也叫属性)

2.实例可以调用类方法和实例方法

3.实例可以访问类变量和实例变量

实例方法

语法

作用

Class 类名(继承列表)

Def 实例方法(srlf,形参1,形参2…)

用于描述一个对象的行为,让此类型的全部对象都拥有相同的行为

说明

1.实例方法的实质是函数,是定义在类内的函数

2.实例方法至少有一个形参,第一个形参代表调用这个方法的实例,一般命名为‘self

实例方法的调用语法

1.实例·实例方法名(调用传参)

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

 

示例

class Dog:

    def infos(self):

        print(self.color, '', self.kinds)

    def eat(self, food):

        '''

        Dog类型的对象吃东西时,用food 属性记住

        此对象吃的是什么

        '''

        print(self.color, '', self.kinds,

              '正在吃', food)

        self.food = food

    def food_info(self):

        print(self.color, '', self.kinds,

            '上次吃的是', self.food)

dog1 = Dog()

dog1.kinds = '京巴'  # dog1绑定的Dog对象添加kinds属性

dog1.color = '白色'  # 创建color实例变量

dog1.color = '黄色'  # 改变实例变量color的绑定关系

dog2 = Dog()  # 另一个对象

dog2.kinds = '导盲犬'

dog2.color = '黑色'

dog1.infos()

dog2.infos()

# print(dog1.color, '', dog1.kinds)  # 获取属性的数据

# print(dog2.color, '', dog2.kinds)

dog1.eat('骨头')

dog1.food_info()

# dog2.food_info()  # dog2没有food这个属性,调用出错

练习:

#定义一个描述人的信息的类:Human

# class Human:

#     def set_info(self,n,a,addr = '不详'):

#         '''此方法为人添加:姓名,年龄,家庭住址属性'''

#         self.name = n

#         self.age = a

#         self.address = addr

#     def show_info(self):

#         '''此处显示此人的信息'''

#         print(self.name,'今年',self.age,'岁 家庭住址'

#                                     ,self.address )    

# h1 = Human()

# h1.set_info('小张','20','北京市朝阳区')

# h2 = Human()

# h2.set_info('小李','18')

# h1.show_info() #小张 今年 20 岁 家庭住址:

# h2.show_info()

实例属性

实例属性attribute(实例变量)

每个实例可以用自己的变量,称为实例变量(也叫属性)

 

使用语法

实例·属性名

属性的赋值规则:

1. 首次为属性赋值则创建此属性

2.再次为属性赋值则改变属性的绑定关

作用

记录每个对象自身的数据

删除属性

del 语句

语法

del 对象·属性名

示例:

class Dog:

    pass

dog1 = Dog()

dog1 = color = ‘白色’  #添加属性

del = dog.color   #删除属性

del总结

1)删除变量

    del  a

2)删除列表中的元素

Del  L[0]

3)删除字典中键

Del d[‘name’]

4)删除对象的属性

Del    dog1.color

 

初始化方法

 

作用

对新创建的对象添加属性等初始化操作

 

语法格式

Class 类名(继承列表):

Def _init_(self[,形参列表])

    语句块

注:[ ]里的内容代表可省略

 

 

说明

1. 初始化方法名必须为_init_不可改变

2. 初始化方法会在构造函数创建实例后自动调用,且将实例自身通过第一个参数self传入del_init_方法

3. 构造函数的实参将通过_init_方法的参数列表传入到_init_方法中

4. 初始化方法内如果需要return语句返回,则只能返回None

示例

# class car:

#     def __init__(self,clr,brand,model):

#         self.color = clr #颜色

#         self.brand = brand #品牌

#         self.model = model #型号

#         #print('car的初始化方法被调用')

#     def run(self,speed):

#         print(self.color,'',self.brand,

#             self.model,'正在以',speed,

#                 '公里/小时的速度行驶')

# c1 = car('红色','奥迪','A6')

# c1.run(200)

# c2 = car('蓝色','TESLAS','Model S')

# c2.run(150)

练习:

 写一个学生类,用来描述学生信息

     要求:

      1)为该类添加初始化方法,实现在创建对象时自动设置'姓名','年龄','成绩'属性

      2)添加set_score

        方法能为对象修改成绩信息,并限制成绩在0~100之间

      3)添加show_info方法打印学生对象的信息

class Student:

    def __init__(self,name,age,score=0):

        self.name = name

        self.age = age

        self.score = score

    def set_score(self,score):

        if 0 <= score <= 100:

            self.score = score

        else:

            #通知调用者,调用实参不合法

            raise ValueError('值不在相应的范围内')

    def show_info(self):

        print(self.name,'今年',

            self.age,''

              '  成绩是',self.score)

    def get_score(self):

        return self.score

s1 = Student('小其',17,59)

s1.set_score(70)

s1.show_info()

print('s1绑定的对象为:',s1.get_score())

析构方法

语法

Class 类名(继承列表):

Def __del__(self):

    语句块

作用

通常用来释放此对象占用的资源

说明

1. 析构方法会在对象被销毁时自动调用

2. Python语句建议不要在对象销毁时做任何事情,因为对象销毁的时间难以确定

示例

class Car:

    def __init__(self,name):

        self.name = name

        print("汽车",name,"对象被创建")

    def __del__(self):

        print("汽车",self.name,'对象被销毁')

c1 = Car("BYD E6")

del c1

while  True:

   

print('程序结束')

预置的实例属性

 

语法

__dict__属性

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

示例

class Dog:

    pass

dog1 = Dog()

print(dog1.__dict__)  #{}

dog1.color = "白色"

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

__class__属性

语法

__class__属性绑定创建此实例的类(类实例)

作用

可以借助于此属性来访问创建此实例的类

示例:

class Dog:

    pass

dog1 = Dog()

print(dog1.__class__)

dog2 = dog1.__class__()

print(dog2.__class__)

用户类的函数

种类

1.isinstanceobj, class__or__tuple

2.Typeobj

返回这个对象obj是否是某个类的对象,或者某些类中的一个类的对象,如果是则返回Ture,否则返回False

返回对象的类

示例:

#在交互模式下运行

isinstance (3.14,float) #Ture

isinstance(python,str)  #Ture

#在编辑器下运行

class Dog:

    pass

deg1 = Dog()

isinstance(dog1,Dog) #Ture

练习:

有两个人(Human):

    1.姓名:张三 年龄:35

    2.姓名:李四 年龄:8

    行为:

        1.教别人学东西 teacd

         2.工作赚钱 work

         3.借钱  borrow

    用程序描述如下事情:

        张三 教 李四 学 python

        李四 教 张三 学 滑冰

        张三 上班 赚了 1000元钱

        李四 向 张三 借了 200元钱

        显示李四的全部信息

        显示张三发全部信息   

答案:

class Human:

    def __init__(self, name, age):

        #1创建函数加入姓名年龄

        self.name = name  # 姓名

        self.age = age  # 年龄

        self.money = 0  # 钱数

        self.skill = []  # 技能

    def teach(self, other, skl):

        #2创建函数得到新学技能(other)代表其他人

        other.skill.append(skl)  # other得到了技能

        print(self.name, '正在教', other.name,

              '', skl)

    def work(self, money):

        #3创建函数上班赚了多少钱

        self.money += money

        print(self.name, '上班赚了', money, '元钱')

    def borrow(self, other, money):

        #4创建函数本人向(other)其他人借钱

        '''借钱成功返回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):

        #5创建函数综合起来得到新的技能,有多少钱

        print(self.age, "岁的", self.name,

            '有技能:', self.skill, ',钱包内的钱数是',

            self.money)

zhang3 = Human("张三", 35)

li4 = Human('李四', 8)

#传参给1

zhang3.teach(li4, 'python')#张三教李四学技能

li4.teach(zhang3, '滑冰')#李四教张三学技能

#传参给2

zhang3.work(1000)  # 张三 上班 赚了 1000元钱

#传参给3

li4.borrow(zhang3, 200)  # 李四 向 张三 借了 200元钱

#传参给4

zhang3.show_info()

li4.show_info()

#传参给5

练习:

        将之前的学生信息管理

         原代码中用字典来保存每个学生信息,现改为用对象来保存每个学生的信息

           学生类的存入模块student.py中 

猜你喜欢

转载自blog.csdn.net/weixin_42312995/article/details/80821927
今日推荐