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()
-------->测试结果:
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))
-------->测试结果:
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))
-------->测试结果:
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()
-------->测试结果:
练习(二)
-------->(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())
-------->测试结果:
练习(三)
-------->(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地址,存入文件
-------->测试结果:
5.str方法
-------->题目要求:
举例说明str方法的使用
-------->代码如下:
class Dog():
def __init__(self,name):
self.name=name
def __str__(self):
#必须返回一个字符串
return '这是%s' %(self.name)
tom=Dog('旺财')
print(tom)
-------->测试结果:
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()
-------->测试结果:
#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(属性名) = 形参 接收外部传递的参数
-------->测试结果: