当前位置: 移动技术网 > IT编程>脚本编程>Python > Python的(class,self,init,str.)学习,含代码实例

Python的(class,self,init,str.)学习,含代码实例

2018年03月10日  | 移动技术网IT编程  | 我要评论

大风车儿童摄影加盟,蒋勤勤老公,小学数学课件网

Python的(class,self,init,str.)学习,含代码实例

今天开始学对象及面向对象的方法:关键字:class,self,init,str.

现实生活中,一切都是对象,如人类,动物,植物,哪怕是没有生命的汽车、电子产品,或者说抽象的天气等都是对象,而对象包含了静态特征和动态特征,静态如物品的颜色,形状,大小,动态如物品的转动,运动等。而我们今天要学的,对象的静态特征抽象成属性,也就是变量;把动态特征抽象成行为,也就是方法。

step1. 定义类

类是对象的蓝图和模板,有了类就可以创建对象

定义类需要做两件事情:数据抽象和行为抽象

数据抽象 - 抽取对象共同的静态特征(找名词) - 属性

行为抽象 - 抽取对象共同的动态特征(找动词) - 方法

定义类的关键字 - class- 类名(每个单词首字母大写)

class Student(object):           # 定义类,每个单词首字母大写
    def __init__(self,name='none',age=18): # 构造方法(构造器/构造子 - constructor)
                                           # 调用该方法的时候,不是使用方法的名字,而是使用类的名字
                                           # 可以设默认值
        # 给对象绑定属性
        self._name = name       # __name 加上一个下划线,可以保护该name,不允许再修改。
        self._age = age

    # 我们定义一个方法就代表对象可以接收这个消息
    # 对象的方法的第一个参数都是统一写成self
    # 它代表了接收消息的对象 - 对象.消息(参数)
    def study(self,course):
        print('%s正在学习%s' %(self._name, course))

    def watch_av(self):
        if self._age >= 18:
            print('%s正在观看岛国爱情动作片!!' % self._name)
        else:
            print('%s,你才%s岁,我们推荐你去看《熊出没》!' % (self._name,self._age))

小结:这是第一步,定义类,把静态特征抽象出来,就学生而言,什么是静态特征呢,比如姓名,年龄;那么动态特征呢,比如学生可以看电视,学生可以学习,可以等等。看书是一个动作,看电视一个动作,可以分开来定义。框架都是一样,抓住静态特征与动态特征,仔细思考,应该都能写出自己想要的结果,只是能不能达到最后的效果,那就要仔细推敲,未达目的不罢休的精神去完成代码。

step2. 调用构造方法创建学生对象

实际调用的是Student类中的init方法

def main():
    stu1 = Student('xl')
#    stu1.name = 'xl'

step 3.给对象发出消息

通过给对象发消息堂对象完成某些工作

解决任何问题都是通过让对象去做事情

stu1.study('Python程序设计')
    stu2 = Student('yqx')
    stu2.name = 'yc'
    stu2.study('HTML网页设计')
    stu2.watch_av()


if __name__ == '__main__':
    main()

小结:这一部分就是完成学生的动作,通过给对象发送消息完成对应的某些工作,解决所有问题都是通过让对象去做事情完成的。

例:数字时钟

class Clock(object):
    def __init__(self,hour=0,minute=0,second=0):
        self._hour = hour
        self._minute = minute
        self._sencond = second

    def run(self):
        """走字"""
        time_n = [self._hour,self._minute,self._minute]
        self._sencond += 1
        if self._sencond == 60:
            self._sencond = 0
            self._minute += 1
            if self._minute == 60:
                self._minute = 0
                self._hour += 1
                if self._hour == 24:
                    self._hour = 0

    # 下面的方法__str__(self)可以获得对象的字符串表达形式
    # 当我们用print打印对象时会自动调用该方法
#    def __str__(self):
#        return ('%02d:%02d:%02d' % (self._hour, self._minute, self._sencond))

    def show(self):
        return ('%02d:%02d:%02d'%(self._hour,self._minute ,self._sencond ))


def main():
    clc = Clock(23,59,58)
    print(clc)
    print(id(clc))
    while True:
        system('cls')
        print(clc.show())
        time.sleep(1)
        clc.run()



if __name__ == '__main__':
    main()

小结:数字时钟,对象就是小时,分钟,秒,让这些对象,进行变更来完成数字时钟,而方法就是秒表逢60进1,分钟逢60进1,小时逢24置零,完成数字时钟的制作。

例:围墙、泳池造价:

from math import pi
# 我们定义一个类实际上是把数据和操作数据的函数绑定到一起
# 形成一个逻辑上的整体 这个整体就叫做对象
# 而且将来任何时候想使用这种对象时直接复用这个类型
class Circle(object):

    def __init__(self,radius=0):
        self._radius = radius

    def area(self):
        return pi * self._radius **2

    def perimeter(self):
        return 2 * pi * self._radius


def main():
    r = float(input('圆的半径r='))
    big = Circle(r + 3)
    small = Circle(r)
    print('围墙的造价为%.2f'%(big.perimeter()*25))
    print('过道的造价为%.2f'%((big.area()-small.area())*32.5))


if __name__ == '__main__':
    main()

小结:这是之前的一道小问题,游泳池过道及围墙的造价。游泳池半径就是静态特征,是对象,而要得到相关的过道,围墙造价,就需要通过半径去计算得到,这是动态特征,就是方法。让对象通过方法去完成动作。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网