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重点在准确性

原文地址:https://www.cnblogs.com/sihye/p/14443100.html