Python精简入门学习(十五)
2021-04-15 本文已影响0人
码市冲冲冲
Python精简入门学习之_ init _()
-_ init _()
python自带的内置函数类 使用双下划线 包起来的[魔术方法]。
是一个初始化的方法 用来定义实例属性 和初始化数据的 在创建对象的时候自动调用 不用手动去调用。
利用传参的机制可以让我们定义功能更加强大且方便 类。
class People:
def __init__(self,name,sex,age): # 这里的self如同Java的this,可看作对象内部持有一个引用。
self.name = name # 这里定义了名字
self.sex = sex # 性别
self.age = age # 年龄
def eat(self,food):
'''
吃的行为
:return:
'''
print(self.name+'喜欢吃'+food)
pass
pass
# xm = People()
# xm.name = '小明' # 添加实例属性
# xm.sex = '男'
# xm.age = 11
# print(xm.name,xm.sex,xm.age)
# 如果有n个这个对象 被实例化 那么就需要添加很多次这样的属性可 显然是比较麻烦
zs = People('张三','男',16)
print(zs.name,zs.age)
zs.eat('橘子')
ls = People('李四','女',15)
print(ls.name,ls.age)
ls.eat('菠萝')
-self
self只是在类中定义 实例方法的时候才有意义 在调用的时候不必传入相应的参数 而是由解释器 自动去指向。
self的名字是可以更改的 可以定义成其他的名字 只是默认的定义成self。
self 指的是类实例对象本身 相当于java的this。
_ _new_ _和_ _init_ _函数的区别。
_ _new_ _类的实例化方法 必须要返回该实例 否则对象就创建不成功。
_ _init_ _用来做数据属性初始化工作 也可以认为是实例的构造方法 接受类的实例 self 并对其进行构造。
_ _init_ _至少有一个参数 cls 代表要实例化的类 此参数在实例化时由python解释器自动提供。
_ _new_ _函数执行要早于_ _init_ _函数。
class Person:
'''
定义类
'''
def __init__(self,pro,name,food): # 初始化对象
'''
:param pro:专业
:param pro:姓名
:param pro:食物
'''
self.pro = pro
self.name = name
self.food = food
print('------------init----------------')
pass
def eat(a,name,food):
'''
实例方法
:return:
'''
print('a=%s' % id(a))
print('%s喜欢吃%s专业是%s'%(a.name,a.food,a.pro))
pass
def __str__(self):
'''
打印对象 自定义对象 是内容格式的
:return:
'''
return '%s喜欢吃: %s 专业是: %s'%(self.name,self.food,self.pro)
def __new__(cls, *args, **kwargs):
'''
创建对象实例方法 每调用一次 就会成成一个新的对象 cls 就是class的缩写
场景 可以控制创建对象的一些属性限定 经常用做单例模式的时候来使用
:param args:
:param kwargs:
'''
print('-----------new-------函数的执行--------')
return object.__new__(cls) # 在这里是真正创建对象实例
pass
pass
# xw是一个实例化对象
xw = Person('数据分析','小王','香蕉')
# print('xw=%s' % id(xw))
# xw.eat('小王','香蕉')
print(xw) # 直接打印输出