面向对象1
面向对象编程
面向对象编程:Object Oriented Programming,简称OOP,是一种程序设计方法。
类与对象
类
类是抽象的模板,用来描述具有相同属性和方法的对象的集合,比如Animal类。
类名通常采用驼峰式命名方式,尽量让字面意思体现出类的作用。
Pyt使用class关键字来定义类,其基本结构如下:
class 类名:
def方法名(self,参数):# 行为
pass
amy = 类名()
amy.方法名(参数)
'''
输出多个同学信息
'''
def stu_info(name,age,gender,addr):
print(name,age,gender,addr)
stu_info("F.S","12",'male','shanghai')
stu_info("hanhan","12",'male','shanghai')
stu_info("doubi","12",'male','shanghai')
class Students(object):
def stu_info(name,age,gender,addr):
print(name,age,gender.addr)
s = Students()
s.stu_info("F.S","12",'male','shanghai')
s.stu_info("hanhan","12",'male','beijing')
s.stu_info("doubi","12",'male','hefei')
'''
# 定义
class类名(object):
def 方法名(self,参数):
pass
# 执行
# 类名()
s = Students() # s为对象(实例化)
s.方法名(参数)
'''
对象
某一个具体事物的存在,在现实世界中可以看得见摸着着的。
类和对象的区分练习
汽车 | 类 |
---|---|
奔驰 | 对象 |
宝马 | 对象 |
狗 | 类 |
大绿狗 | 对象 |
水果 | 类 |
香蕉 | 对象 |
苹果 | 对象 |
类的构成
类(class)由3个部分构成
- 类的名称:类名
- 类的属性:一组数据
- 类的方法:允许对类进行操作的方法
self参数
对象可以将自己的属性(name,age)带给类
'''
self是什么?
self其实就是对象本身,也就是说当实例化的对象是谁,self就是谁
self形参
'''
# class Students(object):
# def test(self):
# print(self)
# Jc = Students()
# print(Jc)
# Jc.test()
# Sige = Students()
# print(Sige)
# Sige.test()
# li = [1,2,3]
# li.append() # 将对象追加到列表的末尾
'''
对象是否可以将自己的属性(name,age)带给类?
self就是代表当前对象
'''
# class Students(object):
# # def info(self):
# # print(self.name,self.age)
# # Sige = Students()
# # Sige.name = 'sige'
# # Sige.age = 31
# # Sige.info()
# # Qian = Students()
# # Qian.name = 'qian'
# # Qian.age = 18
# # Qian.info()
class Students(object):
def stu_info(self,name):
print(name,self.age,self.gender,self.addr)
s = Students()
s.age = '18'
s.gender = 'male'
s.addr = 'shanghai'
s.stu_info("F.S")
s.stu_info("hanhan")
s.stu_info("doubi")
构造方法
'''
魔法方法命名:__魔法__() --> 有特殊功能的方法
构造方法__init__():创建对象时,同时通过对象执行这个方法
注意:
1.构造方法 底层封装返回None
2.构造方法当中声明的属性是允许外部调用的
'''
# class Student(object):
# def __init__(self):
# print("---1---")
# def test(self):
# print("hanhan")
# qian = Student()
class Students(object):
def __init__(self):
self.age = '18'
self.gender = 'male'
self.addr = 'shanghai'
# 默认返回值是None
# return self.age # TypeError: __init__() should return None, not 'str'
def stu_info(self,name):
print(name,self.age,self.gender,self.addr)
def test(self):
self.weight = '120'
s = Students()
# print(s) # 打印出地址
print(s.age)
print(s.gender)
s.stu_info("F.S")
s.stu_info("hanhan")
s.stu_info("doubi")
print(s.weight) # AttributeError: 'Students'对象没有属性'weight'
str()魔法方法
'''
__str__()
1.return返回值一定要是字符串类型
2.有多个返回值时,注意使用字符串拼接
'''
class Students(object):
def __init__(self, age, gender, addr):
self.age = age
self.gender = gender
self.addr = addr
def __str__(self):
# return self.age # 报错 __str__ 返回非字符串(类型为int)
# return self.gender
# return str(self.age)
# return str(self.age), self.gender, self.addr # 报错 __str__ 返回非字符串(类型为tuple)
# return f'{str(self.age)},{self.gender},{self.addr}'
return self.age
s = Students(18, 'male', 'shanghai')
# print(s)
print(s.__str__()) # 跟普通调用方法无区别,不会报错
class People(object):
def set_age(self, new_age):
'''
年龄0-100岁 如果大于100或小于0时就归零
:return:
'''
if new_age > 0 and new_age <= 100:
self.age = new_age
else:
self.age = 0
def get_age(self):
return self.age
amy = People()
amy.set_age(20)
print(amy.get_age())