类和对象
#1.__str__方法 对象转为字符串
# class Myclass:#当需要打印一个对象的时候,用__str__方法重写,用了之后,当print对象的时候,类中的__str__方法自动被调用
# i=123
# def __init__(self,num,name,age):
# self.num=num
# self.name=name
# self.age=age
# def __str__(self):
# return '编号:%d,姓名:%s,年龄:%d'%(self.num,self.name,self.age)
# a=Myclass(1,'小明',12)
# print(a)#运行结果是 编号:1,姓名:小明,年龄:12
#*******************************************************
#
#2.__repr__方法 对象转为字符串
# class Test():
# def __init__(self,name,sex):
# self.name=name
# self.sex=sex
# def __repr__(self):
# return self.name+self.sex
# a=Test('小明','男')
# print(a)
# #__repr__与__str__对比
# from datetime import datetime
# time=datetime.today()
# print(time.__repr__())
# print(time.__str__())
# #__repr__返回结果更精准,适用于开发者,__str__更具有可读性,一般面向用户
#*******************************************************************************
# 3.链式编程
# class Test:
# def pri(self):
# print(self)#打印对象的地址
# print(self.__class__)#打印对象的类型
# def re(self):
# print(1)
# return self#返回对象自己,可以继续调用Test类的所有方法
#
# a=Test()
# a.pri()
# print(a.re())
# print(a.re().re().re())#打印3次1,过程中返回的对象不被返回,而用来调用下次的方法
# #************************************
#4.创建一个类,以及单继承
#
# class People():
# eye=2
# leg=2
# nose=2
# def __init__(self,name,height,weight):
# self.name=name
# self.__height=height
# self.__weight=weight#定义私有属性,类外部无法访问,只能定义方法从外部由对象访问
# def speak(self):
# print('我是%s,身高%d,体重%d'%(self.name,self.__height,self.__weight))
#
# people=People('小明',178,80)
# people.speak()#我是小明,身高178,体重80
#
# class Student(People):
# def __init__(self,name,height,weight,num):
# super().__init__(name,height,weight)
# self.num=num
# def talk(self):
# print('我叫%s,我的学号是%d'%(self.name,self.num))
#
# student=Student('小红',160,50,1)
# student.talk()#我叫小红,我的学号是1 如果子类和父类中有相同名字的方法,执行的是子类
# student.speak()#我是小红,身高160,体重50 调用父类方法
#
# #继承了people中的属性,但是私有属性是无法访问到的,可以通过调用父类speak方法访问
#****************************************************************************************
# #5.除了私有属性还可以私有方法,定义另外一个方法来调用私有方法
#
# class Test:
# def f1(self):
# print('这是公有方法')
# def __f2(self):
# print('这是私有方法')
# def f3(self):
# self.__f2()
# a=Test()
# a.f1()
# a.f3()#通过接口f3来调用私有方法f2
# #*******************************************************
# #6.让对象相加有意义,用__add__
# class Vector:
# def __init__(self,x,y):
# self.x=x
# self.y=y
# def __str__(self):
# return '矢量坐标是(%d,%d)'%(self.x,self.y)
# def __add__(self,other):
# return Vector(self.x+other.x,self.y+other.y)
#
# v1=Vector(2,3)
# v2=Vector(-8,0)
# print(v1+v2)
#两个对象相加,这里自动调用__add__方法,返回一个对象,
# 当这个对象被print,又会启动__str__方法,所以返回的结果是 矢量坐标是(-6,3)
# #***********************************************************************************