python 包与类
self方法
1、调用__new__方法,用来申请内存空间
2、调用__init方法向内存空间传入参数,将self指向创建好的内存空间,填充数据
3、将结果赋给变量,变量值也指向创建好的内存空间
class Student(object):
def __init__(self,x,y):
self.name = x
self.age = y
s1 = Student('siri', 18)
print(s1)
输出:<main.Student object at 0x10c1c2910> 内存空间地址
class Student(object):
def __init__(self,x,y):
self.name = x
self.age = y
s1 = Student('siri', 18)
print(s1.name)
输出:siri
4、新建的变量会新增加一个内存空间,每个变量指向不同的变量空间
5、类中的函数不会随变量的增加多创建,而是通过self去调用函数
class Student(object):
def __init__(self,x,y):
self.name = x
self.age = y
def say_hello(self):
print('大家好,我是', self.name,self.age)
s1 = Student('siri', 18)
print(s1.say_hello())
输出:大家好,我是 siri 18
slots方法
6、增加动态属性,使用等号
# 如果属性不存在,会给对象增加一个新的属性
# 给s1增加一个新的属性
s1.city = '上海'
print(s1.say_hello())
print(s1.city)
输出: 上海
7、固定不允许增加动态属性
# 直接定义在类里,是一个元祖,用来规定可以存在的属性
class Student(object):
__slots__ = ('name','age','city')
def __init__(self,x,y):
self.name = x
self.age = y
def say_hello(self):
print('大家好,我是', self.name,self.age)
s1 = Student('siri', 18)
# 增加动态属性
s1.city = '上海'
print(s1.say_hello())
print(s1.city)
__init__魔术(魔法)方法
1、不需要手动调用,会在合适的时候自动调用,只要创建了就会自动调用init方法
2、这些方法都是使用__开始,__结束
3、方法名都是系统设置好,会自动调用
4、销毁调用,当对象被销毁时,待整个程序走完会自动调用
def __del__(self):
print('结束')
5、手动调用
del 变量名
repr 和__str__
当打印一个对象时,会调用这个对象的
当两个都写时,会自动调str方法
class Student(object):
def __init__(self, name, age):
self.name = name
self.age = age
def say_hello(self):
print('大家好,我是', self.name,self.age)
def __repr__(self):
return '姓名:{},年龄:{}'.format(self.name,self.age)
def __del__(self):
print('结束')
s1 = Student('siri', 18)
# 增加动态属性
print(s1)
print(s1.__repr__())
print(repr(s1))
输出:
姓名:siri,年龄:18
结束
str和repr的区别,str重点在可读性,repr重点在准确性