美文网首页
面向对象基础——slots魔法和类中的方法

面向对象基础——slots魔法和类中的方法

作者: 她即我命 | 来源:发表于2018-07-31 19:28 被阅读57次

1.slots魔法

class Person:

    # __slots__ 的功能就是约束类中的对象中的属性
    __slots__ = ('name','age','sex','id')

    def __init__(self,name='',age=0):
        self.name = name
        self.age = age

    # 自定义对象的打印格式
    """
    id() :是Python的内置函数,功能是获取变量的地址
    """
    def __str__(self):
        return self.name + ',' + str(self.age) + ',' +str(id(self))


if __name__ == '__main__':
    p1 =Person('小王',20)
    p1.name = '老王'
    p1.sex = '男'

    print(p1)

运行结果:

老王,20,34808696

2.类中的方法

属性: 对象的属性(属性)、类的属性(类的字段)
对象属性:属于对象的,不同对象对应的值可能不同
类的字段:声明在类里面,函数外面,类的属性属于类(类的字段,通过类来使用)

方法: 对象方法(方法)、类方法、静态函数
对象方法:自带一个self参数,一般需要对象去调用
类方法:
1.使用@classmethod修饰
2.自带一个cls参数,并且这个参数不用传参,谁来调用cls就指向谁
3.类的方法通过类来调用
静态方法:
1.使用@staticmethod来调用
2.没有默认参数
3.静态方法要通过类来调用

怎么选择对象方法,类方法,静态方法
if 如果实现函数的功能需要使用对应的属性,就声明成对象方法:

下面的推荐使用类方法
elif 如果实现函数的功能需要使用类的字段或者调用类的方法,就声明成类方法

else 如果是想函数功能既不需要函数的属性,也不需要类的字段,就声明静态方法

补充:
Ctrl+r ---->查钊替换
Ctrl+f ---->查找

class Person:
    # number是类字段
    number = 0

    def __init__(self,name ='', age = 0):
        # name和age是对象属性
        self.name = name
        self.age = age

     #eat方法是对象方法
    def eat(self,food):
        print('%s再吃%s'%(self.name,food))

    # hurt_earth就是一个类方法
    # 写一次就必须 @classmethod 修饰一次
    @classmethod
    def hurt_earth(cls):
        # cls指向的是调用这个方法的类,cls可以当成类来使用
        pt = cls('张三')  #可以使用cls创建对象
        print(pt.name)

        print(cls.number)  #可以通过cls使用类的字段

        print('人类破坏环境')

    #protect_esrth是一个静态方法
    @staticmethod
    def protect_esrth():
        print(Person.number)
        print('保护地球')



if __name__ == '__main__':
    # 1.类的字段类来使用
    print(Person.number)

    # 2.对象的属性对象来使用
    print(Person().name)
    print(Person().age)

    # 3.对象方法对象调用
    p1 =Person('小明')
    p1.eat('面条')

    p2 = Person('小红')
    p2.eat('火锅')

    # 4.类方法要通过类来调用
    Person.hurt_earth()

    # 5.静态方法通过类来调用
    Person.protect_esrth()

运行结果:

0

0
小明再吃面条
小红再吃火锅
张三
0
人类破坏环境
0
保护地球

练习:
写一个班级类:属性:班级名,学生,功能:添加学生

class Student:
    """学生类"""
    def __init__(self,name='',age=0):
        self.name = name
        self.age = age
    def __str__(self):
        return 'name:%s age:%d'%(self.name,self.age)

class Class:
    def __init__(self,name='',students = [] ):
        self.calss_name = name
        self.students = students

    def add_student(self):
        name = input('name:')
        age = input('age:')
        #根据创建的信息创建学生对象
        stu = Student(name,int(age))
        #添加学生
        self.students.append(stu)


#创建类的对象
cls1 =  Class('py1801')
cls1.add_student()
print(cls1.students[0])  #cls1.students还是一个对象

运行结果

name:陈鹏
age:23
name:陈鹏 age:23

相关文章

  • 面向对象基础——slots魔法和类中的方法

    1.slots魔法 运行结果: 2.类中的方法 属性: 对象的属性(属性)、类的属性(类的字段)对象属性:属于对象...

  • 面向对象

    面向对象基础 目标 理解面向对象 类和对象 添加和获取对象属性 魔法方法 一. 理解面向对象 面向对象是一种抽象化...

  • Python学习(五)

    类与对象 面向对象高级编程 使用slots 给一个类动态的绑定属性和方法 from types import M...

  • 匿名函数,面向对象

    匿名函数和使用 类 &面向对象 给对象添加属性 ——init——()方法 魔法方法

  • 面向对象(一)

    面向对象编程的2个非常重要的概念:类和对象 定义类的方法 创建对象 魔法方法 __init__()

  • Python -- 面向对象高级编程

    面向对象设计中最基础的3个概念:数据封装、继承和多态 使用_ slots _ _ slots _的作用:限制实例的...

  • 21.Python编程:访问权限

    前面一节重点学习了Python3中的面向对象最基础的类和对象的知识:类的定义、对象、构造方法、属性和方法等,在类中...

  • Python语言基础9 面向对象

    面向对象、定义类、对象、魔法方法、__init__()方法、__str__()方法、__del__()方法、继承、...

  • python 10天快速教程 Day7

    本节重点 面向对象介绍 简单类与对象 魔法方法 继承、super 私有属性与私有方法 一、面向对象介绍 面向过程:...

  • day-010--面向对象编程基础

    面向对象编程基础 面向对象技术简介类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每...

网友评论

      本文标题:面向对象基础——slots魔法和类中的方法

      本文链接:https://www.haomeiwen.com/subject/skxkvftx.html