zoukankan      html  css  js  c++  java
  • Python 类对象、类属性、类方法、静态方法。

     类对象

    我们在 class 类名: 进行定义后当解释器执行到class 语句的时候就会创建一个类对象

    class Student:
        pass
    
    print(type(Student))
    print(id(Student))
    Stu2 = Student
    s1 = Stu2()
    print(s1)
    ====
    <class 'type'>
    42634280
    <__main__.Student object at 0x0000000002285AC8>

    类属性

    类级别的 属性也可以创建, 被所有实例所共享的

    class Student:
        company = "sowhat" #  类属性
        count = 0 # 类属性
    
        def __init__(self,name,score):
            self.name = name
            self.score = score
            Student.count += 1
    
        def say_score(self):
            print("my company is:",Student.company)
            print(self.name,' score is :',self.score)
    
    s1 = Student('张三',80)
    s1.say_score()
    print('一共创建{0}个Student对象'.format(Student.count))
    ===
    my company is: sowhat
    张三  score is : 80
    一共创建1个Student对象

    类方法

    类方法是从属与 类对象 的方法,类方法通过装饰器 @classmethod 来定义,个数如下

    @classmethod
    def 类方法名字(cls,[,形参列表]):
        函数体

    1. @classmethod 必须位于方法上面一行

    2.  第一个cls 必须有,cls 指的就是 ‘类对象’ 本身。

    3.  调用类方法的格式  : 类名(实例化对象).类方法名(参数列表)。参数列表不能也不可以给cls传值。

    4. 类方法中访问实例属性跟实例方法会报错。

    5.  子类继承父类方法的时候,传入cls是子类的对象,而非父类对象。

    class Student:
        company = "sowhat"
    
        @classmethod
        def printCompany(cls):
            print(cls.company)
    
    
    Student.printCompany()

    静态方法

    Python 中允许定义跟 ‘类对象’ 无关的方法,称为 静态方法, 静态方法跟模块中定义的普通函数没有区别,只不过 静态方法放到了 类的名字空间,需要通过类调用。静态方法通过 @staticmethod 来定义。

    1.  @staticmethod 必须位于方法的第一行

    2.  调用静态方法的格式: 类名(实例化对象). 静态方法名字(参数)

    3.  静态方法中访问实例属性跟实例方法会报错。

    内存分析实例对象跟类对象创建过程

    
    class Student:
        company = "sowhat"
        count = 0
    
        def __init__(self,name,score):
            self.name = name
            self.score = score
            Student.count += 1
    
        def say_score(self):
            print("my company is :",Student.company)
            print(self.name, ' score is :' ,self.score)
    
    s1 = Student('张三',88)
    s1.say_score()
    print('一共创建{0}个Student实例化对象'.format(Student.count))

    关注公众号 海量干货等你
  • 相关阅读:
    3星|简·雅各布斯《经济的本质》:经济遵循与自然一样的发展规律:分化与组合、多样性、共同发展
    3星|《陈志武金融通识课》:从金融的角度看历史、文化、商业
    2018左其盛差评榜(截至7月6日)
    2018左其盛好书榜(截至7月6日)
    哈佛多是标题党。6本哈佛书点评
    OPENGL画图类库
    Html,Css,Javascript及其他的注释方法详解
    C#画图解决闪烁问题
    C#ShowCursor光标的显示与隐藏
    C#实现GDI+基本图的缩放、拖拽、移动
  • 原文地址:https://www.cnblogs.com/sowhat1412/p/12734393.html
Copyright © 2011-2022 走看看