Python中面向对象(一)类与对象及常用内置方法

1.面向对象

#面向对象
#面向过程的语言有c
#需要有意义的面向对象的代码,不是有了类就是面向对象
#核心:类,对象
#定义类不要用下划线(函数中使用),使用驼峰命名法机即可
#通过类产生实例化对象的
#类定义出来的是一个框架

-------->题目要求:
举例说明面向对象的用法:
-------->代码如下:

#实例化
#方法:设计层面 函数:程序运行过程中的一种称谓
class StudentInfo():
    name = ''   #变量:数据成员
    age = 0

# 在类中不将其成为函数,称为方法
    def print_file(self):
        print('name:'+self.name)    
        print('age:'+str(self.age))

#只是不一样的对象
student = StudentInfo()
student.print_file()

-------->测试结果:
Python中面向对象(一)类与对象及常用内置方法

2.类与对象

#对象:对象是现实世界或者思维世界中的实体在计算机中的反映
#它将数据以及这些数据上的操作封装在一起
#类:一类事物的统称,对象是类具体化的产物,也就是示例化
#不同的对象有什么不同的特点:比如年龄,性别

-------->题目要求:
举例数说明类和对象的区别
-------->代码如下:

class Student():
    name=''
    age=0

    def do_homework(self):
        print('homework')

student1=Student()
student1.do_homework()
student2=Student()
student2.do_homework()
student3=Student()
student3.do_homework()
print(id(student1))
print(id(student2))
print(id(student3))

-------->测试结果:
Python中面向对象(一)类与对象及常用内置方法

3.构造函数

-------->题目要求:
举例说明如何构造一个简单的函数,输出一名学生的信息
-------->代码如下:

class Student():
    name=''
    age=0
    #初始化,在示例化的时候自己调用了
    def __init__(self,name,age): ##传参
        self.name=name  ##使用self调用
        self.age=age
        # 构造函数
        print('student')

    def do_homework(self):
        print('homework')

student1=Student('老李',28)
print(student1.name)
print(student1.age)
##这个函数没有任何的返回值,初始化时必须返回none,而不是自己定义的
# a=student1.__init__()
# print(a)
# print(type(a))

-------->测试结果:
Python中面向对象(一)类与对象及常用内置方法

4.练习

练习(一)
-------->(1)题目要求:
1.老李今年50岁,身高1.75,每天早上要跑步,会去吃东西
老吴今年36岁,身高1.85,老吴不跑步,老吴喜欢吃东西
-------->代码如下:

class People():
    name=''
    age=0
    #初始化,在示例化的时候自己调用了
    def __init__(self,name,age,height): ##传参
        self.name=name  ##使用self调用
        self.age = age
        self.height=height
        # 构造函数
        # print('student')

    def do_running(self):
        print('running')

    def do_eating(self):
        print('eating')

people1=People('老李',50,1.75)
print('name:',people1.name,'age:',people1.age,'height:',
      people1.height)
people1.do_running()
people1.do_eating()

people2=People('老吴',36,1.85)
print('name:',people2.name,'age:',people2.age,'height:',people2.height)
people2.do_eating()

-------->测试结果:
Python中面向对象(一)类与对象及常用内置方法
练习(二)
-------->(2)题目要求:
使用类实现栈的工作原理
-------->代码如下:

class Stack():

    def __init__(self):
        self.stack = []

    def push(self,value):
        self.stack.append(value)
        return True

    def pop(self):
        #先判断栈是否为空
        if self.stack:
            item = self.stack.pop()
            return item
        else:
            return False

    def top(self):
        if self.stack:
            return self.stack[-1]
        else:
            return False

    def length(self):
        return len(self.stack)

    def view(self):
        return ','.join(self.stack)

s = Stack()
s.push('1')
s.push('2')
#item = s.pop()
print(s.view())

-------->测试结果:
Python中面向对象(一)类与对象及常用内置方法
Python中面向对象(一)类与对象及常用内置方法
练习(三)
-------->(3)题目要求:
生成100个MAC地址并写入文件中,MAC地址前6位(16进制)为01-AF-3B
01-AF-3B
01-AF-3B-xx
01-AF-3B-xx-xx
01-AF-3B-xx-xx-xx
注意(以下代码可以生成16进制的数):
import string
num = string.hexdigits
print(num)

-------->代码如下:

import string
import random
# print(string.hexdigits)
def creat_mac():
    MAC= '01-AF-3B'
    # 生成16进制的数
    hex_num = string.hexdigits
    for i in range(3):
        # 从16进制字符串中随机选出两个数字来(返回值是列表)
        n = random.sample(hex_num,2)
        # 拼接列表中的内容,将小写字母转换成大写
        sn ='-' + ''.join(n).upper()
        MAC += sn
    return MAC
# 主函数:随机生成100个MAC地址
def main():
    # 以写的方式打开文件
    with open('mac.txt','w') as f:
        for i in range(100):
            mac = creat_mac()
            print(mac)
            # 每生成一个MAC地址,存入文件

-------->测试结果:
Python中面向对象(一)类与对象及常用内置方法

5.str方法

-------->题目要求:
举例说明str方法的使用
-------->代码如下:

class Dog():
    def __init__(self,name):
        self.name=name
    def __str__(self):
        #必须返回一个字符串
        return '这是%s' %(self.name)
tom=Dog('旺财')
print(tom)

-------->测试结果:
Python中面向对象(一)类与对象及常用内置方法

6.总结(注意self的用法)

#self:哪一个对象调用的方法,self就是哪一个对象的引用
#可以使用 .属性名 利用赋值语句就可以在类的外部
#给对象增加属性(不推荐),将对象的属性封装在类中
#在类封装的方法内部,self就表示当前调用方法的对象自己

-------->(1)题目要求:
举例使用函数输出猫的姓名和猫要喝水
-------->代码如下:

class Cat():
    def eat(self):
        print('%s爱吃鱼' %self.name)
    def drink(self):
        print('小猫要喝水')

tom = Cat()
tom.name = 'Tom'
print(tom)
tom.eat()
tom.drink()

hello_kitty = Cat()
hello_kitty.name = 'hello_kitty'
hello_kitty.eat()
hello_kitty.drink()

-------->测试结果:
Python中面向对象(一)类与对象及常用内置方法

#self.name(属性名) = 形参 接收外部传递的参数
-------->(2)题目要求:
举例输出两个不同名称的猫爱吃鱼并输出猫的名字
-------->代码如下:

class Cat():
	# 使用self比较专业,使用别的变量名也可以
    def __init__(self,new_name):
        print('这是一个初始化方法')
        self.name = new_name

    def eat(self):
        print('%s爱吃鱼' %self.name)


cat = Cat('tom')
print(cat.name)

hello_kitty = Cat('hk')
print(hello_kitty.name)
hello_kitty.eat()
#self.name(属性名) = 形参 接收外部传递的参数

-------->测试结果:
Python中面向对象(一)类与对象及常用内置方法