Python_day_08_类属性

【第六届起重机创意大赛国一作品——资料分享】 文章目录前言一、比赛内容分析二、确定方案与作品模型1.方案简图2.作品模型三、电控部分控制思路单片机选择与资源分配拓展板的设计接线与走线代码分享总结 阅读详情

属性分为实例属性与类属性

方法分为普通方法,类方法,静态方法

一:属性:

  尽量把需要用户传入的属性作为实例属性,而把同类都一样的属性作为类属性。实例属性在每创造一个实例时都会初始化一遍,不同的实例的实例属性可能不同,不同实例的类属性都相同。从而减少内存。

  1:实例属性:

    最好在init(self,…)中初始化

    内部调用时都需要加上self.

    外部调用时用instancename.propertyname

  2:类属性:

    在init()外初始化

    在内部用classname.类属性名调用

    外部既可以用classname.类属性名又可以用instancename.类属性名来调用

  3:私有属性:

    1):单下划线_开头:只是告诉别人这是私有属性,外部依然可以访问更改

    2):双下划线__开头:外部不可通过instancename.propertyname来访问或者更改

      实际将其转化为了_classname__propertyname

二:方法

  1:普通类方法:


    def fun_name(self,...):

      pass

    外部用实例调用

  2:静态方法:@staticmethod

      不能访问实例属性!!! 参数不能传入self!!!

      与类相关但是不依赖类与实例的方法!!

  3:类方法:@classmethod

      不能访问实例属性!!! 参数必须传入cls!!!

      必须传入cls参数(即代表了此类对象—–区别——self代表实例对象),并且用此来调用类属性:cls.类属性名

  *静态方法与类方法都可以通过类或者实例来调用。其两个的特点都是不能够调用实例属性

1.特殊的类属性

class Animal(object):
    """
    Animals class
    """
    pass

print Animal.mro()
print Animal.__doc__        ##打印对象的类名
print Animal.__name__       ##打印对象名

fentiao = Animal()
print Animal.__bases__      ##打印类的所有父类 , 以元组类型返回
print fentiao.__doc__       ##打印对象的类名
print fentiao.__class__     ##打印类属性
print fentiao.__dict__      ##以字典的方式返回类的方法和属性
# 如果类不是被导入的, 显示为 __main__
# 如果类是被 import 导入的, 则显示类所在的模块名
print fentiao.__module__

**例子:
实现查看类实例化对象的个数
class Info(object):
    count = 0
    # 构造函数
    def __init__(self):
        Info.count += 1
    # 析构函数 , 在删除对象时自动调用 ;
    def __del__(self):
        Info.count -= 1
a = Info()
b = Info()
c = Info()
print Info.count
del a
print Info.count
结果为
3
2

2.类方法和静态方法

通过普通方法,类方法和静态方法,将方法封装起来,提高代码的可维护性

class Info(object):
    # 普通方法 , 第一个参数必须是 self( 对象 );
    def eat(self):
     print self
    # 类方法 , 第一个参数是 cls( 类 );
    @classmethod
    # cls 是 class 的缩写;
    def drink(cls):
        print cls
    # 静态方法 , 不需要加特殊的第一个参数 ;
    @staticmethod
    def run():
        print "run"
a = Info()
# a.eat()
a.drink()

普通方法和类方法区别
普通方法:没有@classmethod装饰器,默认第一个参数是self,调用时对象调用普通方法
类方法:  有@classmethod装饰器,默认第一个参数是class,调用时类调用类方法
静态方法: 有@staticmethod装饰器,默认第一个参数是自定义行参,调用时调用静态方法

类方法和静态方法的应用
class Date(object):
    def __init__(self,year,month,day):
        #封装类的属性
        self.year = year
        self.month = month
        self.day = day

    def echo_date(self):
        print """
        Day: %.2d
        Month: %.2d
        Year: %.4d
        """ %(self.day,self.month,self.year)

    #类方法
    @classmethod
    def str_date(cls,s):    # class --> cls --> 传递当前的类名
        year,month,day = map(int,s.split('-'))  #['2018','04','03']
        d = cls(year,month,day)
        return d

    #静态方法
    @staticmethod
    def is_date_legal(s):
        year,month,day = map(int,s.split('-'))
        return 0 < month <= 12 and 0 < day <= 31

d = Date.str_date('2018-04-03')
d.echo_date()

if Date.is_date_legal('2018-04-03'):
    print "OK"
else:
    print "NOT OK"

结果为
        Day: 03
        Month: 04
        Year: 2018

OK

3.属性property

**例子:

class Price(object):
    def __init__(self, old_price, discount):
        self.old_price = old_price
        self.discount = discount
    @property
    def price(self):
        new_price = self.old_price * self.discount
        return new_price
    @price.setter
    def price(self, value):
        self.old_price = value
    @price.deleter
    def price(self):
        print "%d is delete...." % (self.old_price)
        del self.old_price
    def __del__(self):
        print "deleteing....."
p = Price(100, 0.8)
print p.price
p.price = 200
print p.price
del p.price
# print p.price

**例子:
框架之信息分页显示
"""
@property应用
- 页面显示信息很多时,一般都会分页显示;
- 当用户选择第n页时, 显示该页需要的数据开始索引start和结束索引end;

Django:
flask:
Tornado:
"""

from django.core.paginator import  Paginator

hosts = ['172.25.254.' + str(i) for i in range(100)]

# 1:   hosts[0:10]  start= (1-1)*10  end=1*10
# 2:  hosts[10:20] start=(2-1)*10    end=2*20

class Page(object):
    # current_page: 页数
    # per_items: 每页显示的元素数;
    def __init__(self, current_page=1, per_items=10):
        self.__current_page = current_page
        self.__per_items = per_items

    @property
    def start(self):
        val = (self.__current_pagclass Student(object):
    def __init__(self, name='a', score=100):
        self.name = name
        # 在类里面, 双下划线开头的变量名称为私有属性;
        # 私有属性在该类的其他方法中可以使用;外部不能直接调用私有属性;
        # 私有属性实质是把self.__score改名为self._类名__score;
        self.__score = score

    #  # 在类里面, 双下划线开头的函数名称为私有方法;
    # 父类的私有方法, 子类不能继承;
    def __get_score(self):
        return self.__score



class MathStudent(Student):
    def __init__(self, name, score, IQ):
        super(MathStudent, self).__init__(name, score)
        self.IQ = IQ

    def ok(self):
        super(MathStudent, self).__get_score()
        print 'ok.....'



s = MathStudent('a', 'hello', 100)
print s.__get_score()e - 1) * self.__per_items
        return val

    @property
    def end(self):
        val = self.__current_page * self.__per_items
        return val

p = Page(3,5)
print hosts[p.start:p.end]

私有属性和私有方法

class Student(object):
    def __init__(self, name='a', score=100):
        self.name = name
        # 在类里面, 双下划线开头的变量名称为私有属性;
        # 私有属性在该类的其他方法中可以使用;外部不能直接调用私有属性;
        # 私有属性实质是把self.__score改名为self._类名__score;
        self.__score = score

    #  # 在类里面, 双下划线开头的函数名称为私有方法;
    # 父类的私有方法, 子类不能继承;
    def __get_score(self):
        return self.__score

class MathStudent(Student):
    def __init__(self, name, score, IQ):
        super(MathStudent, self).__init__(name, score)
        self.IQ = IQ

    def ok(self):
        super(MathStudent, self).__get_score()
        print 'ok.....'

s = MathStudent('a', 'hello', 100)
print s.__get_score()






APB Timer验证环境搭建——学习笔记(1) 以下为个人学习笔记,如有疏漏,请大家指正补充~~APB Timer是一个简单的下行计数器,包括一个32位计数器和一组比较器,可以实现多种计时功能。包括生成一次性中断或者定时中断。 阅读详情

相关推荐

WRF替换静态地理数据中的土地利用数据(WRF替换下垫面数据)

   在进行自己的WRF项目模拟的时候,因为需要用中国土地利用数据替换WRF内嵌老旧的土地利用数据,故需要将土地利用进行替换。我使用的中国的土地利用数据是来自中国土地利用数据(1980-2015)。其中我以下载的lucc1980为例进行演示。 1、坐标转换    (1)下载的lucc1980数据如下图所示:    (2)在ArcMap中打开如下图所示: 打开属性表可以看到,lucc1980的坐标系为投影坐标系Krasovsky_1940_Albers,数据格式为GRID。这里需要将投影坐标系转换成地理坐

GIS 1万+

python-day08-类属性和方法,静态方法,设计模式

一、类属性和类方法 “”" 类属性:针对类定义的属性 使用赋值语句在class关键字下可以定义类属性 类方法:针对类定义的方法 在类方法内部可以直接访问类属性或掉用其他的类方法 “”" class Toy(object): count=0 #使用复制语句定义属性,记录所有的玩具数量 def __init__(self,name): self.name=name ...

qq_41977453的博客 144

距离多普勒谱(RD谱)绘制方法及理解

RD谱是信号处理领域常用的图形。原始信号往往是一维时域序列,如何将其二维化,并进行变换生成RD谱呢?由于刚刚接触,查阅了网络上、老师手里的资料,发现RD谱的绘制方法并不统一,有些存在一定问题。在此,将心得体会记录下来。

mddh_123的博客 3万+

【python提高高级day08】property属性+property属性的定义和调用要注意一下几点+简单的实例+property属性的有两种方式+装饰器方式+类属性方式+Django框架中应用了p

文章目录property属性1. 什么是property属性property属性的定义和调用要注意一下几点:2. 简单的实例从上述可见3. property属性的有两种方式3.1 装饰器方式经典类,具有一种@property装饰器新式类,具有三种@property装饰器注意3.2 类属性方式,创建值为property对象的类属性4. Django框架中应用了property属性(了解)综上所述: ...

汪雯琦的博客 461

海康视觉平台VisionMaster通讯实战:三种触发方式深度解析

本文深度解析海康视觉平台VisionMaster的三种通讯触发方式:字符串触发、接收字符串事件触发和轮询D地址触发。通过实际案例和配置技巧,帮助工程师在工业场景中实现高效、稳定的设备通讯,提升视觉系统的集成效率和可靠性。

weixin_42665255的博客 282

SoC 验证老兵手册

《SoC验证老兵手册》摘要: 针对大型SoC系统级验证,手册提出Cache+DMA场景的高效验证方案。核心方法采用C测试用例(模拟Linux/RTOS真实场景)触发隐蔽bug,配合SV Checker精准捕捉硬件问题(如DMA读取脏缓存行)。特别强调验证方法论:C用例负责复杂行为模拟,SV专注RTL正确性检查;利用Linux天然并发性暴露硬件缺陷。手册还包含模拟面试攻防技巧,指出验证架构师需具备定义Stimulus/Checker边界的能力。终极判断标准:未通过Linux下Cache+DMA+SMP+中断测

元直的博客 1371

又开始的python-day08-20200810-面向对象练习-运算符魔法方法-内置属性-对象属性-类属性-私有属性-类方法-静态方法-单例设计模式

# P155-156 # 函数练习题 没做笔记 # 面向对象练习 # 房子 House 有户型 总面积 剩余面积 总面积的60% 家具名称列表 属性 # 新房子没有任何家具 # 新家具的名称追加到家具列表里 # 判断家具的面积 是否超出剩余面积 超过了 提示放不下 # 家具 Furniture 有名字 占地属性 # 席梦思 bed 4 衣柜 chest 2 餐桌 table 1.5 # 将以上3件家具 添加到 房子里 # 打印房子时要求输出 户型 总面积 剩余面积 家具名称列表 class House(ob

心无念的博客 211

LeRobot 入门教程(二)强化学习训练及 SmolVLA 模型微调

本文介绍了LeRobot框架中基于人类在环的样本高效强化学习(HIL-SERL)工作流,包含真实机器人训练和模拟环境训练两大模块。在真实机器人部分,详细说明了从配置设置、工作空间边界确定、演示数据收集、奖励分类器训练到演员-学习者架构部署的全流程,并强调了人类干预的关键作用。同时介绍了适用于模拟训练的gym_hil环境及其配置使用方法。最后,文章提供了微调SmolVLA基础模型的指南,包括数据集收集、微调步骤和模型评估方法。该工作流实现了人机协作的高效强化学习,适用于各类机器人操作任务。

2506_90492529的博客 3897

day08

上一篇写了面向对象编程,今天的内容就是类中的几个重要的概念:类属性,类方法,实例属性,实例方法,静态方法。 这几个概念之所以要单独用一篇来说,是因为他们很重要而且需要学习python这门语言的人必须弄清楚才行,不然在使用面向对象编程的时候就会出错。 我把他们分了组:类属性和类方法为一组,实例属性和实例方法是一组,静态方法单独一组,或许这样可以方便记忆 用几句代码来表示这几种方法分别在类中的哪里。如...

study_python3的博客 226

【数据集】未来不同情景下预测数据:如人口、土地利用等

未来不同情景下预测数据:如人口、土地利用等

WW、forever的博客 2996

SAP-ABAP: BP主数据完全指南:从基础到高阶应用

SAP-ABAP: BP主数据完全指南:从基础到高阶应用

baidu_35680696的博客 1647

【Python-Day 31】一文搞懂 Python 实例属性与类属性:从定义、区别到应用场景

本文将详细解析\*\*实例属性(Instance Attributes)**和**类属性(Class Attributes)\*\*的定义、区别、内存分配机制、应用场景以及常见的“陷阱”。无论你是 Python 初学者还是希望巩固 OOP 基础的进阶者,理解这两种属性的差异对于编写出结构清晰、高效健壮的 Python 代码至关重要。本文通过图文并茂、代码示例和实战场景,助你彻底厘清实例属性与类属性的奥秘。

吴师兄大模型的博客 1204

YOLOv8改进,YOLOv8添加DCNv4可变性卷积(windows系统成功编译),全网最详细教程

DCNv4通过两项关键增强解决了其前身DCNv3的局限性:1. 移除空间聚合中的softmax归一化,以增强其动态特性和表达能力;2. 优化内存访问以最小化冗余操作,从而加速计算。这些改进使得DCNv4相比DCNv3显著加快了收敛速度,并且处理速度大幅提升,前向传播速度超过三倍。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 6469

learn -Python-day08

Python面向对象的继承指的是多个类之间的所属关系,即子类默认继承父类的所有属性和方法,具体如下: 二.单继承 三.多继承 所谓多继承意思就是一个类同时继承了多个父类。 四.子类重写父类同名方法和属性 五.子类调用父类的同名方法和属性 六.多层继承 七.super()调用父类方法 八. 私有权限 8.1 定义私有属性和方法 1. 命名约定 在Python中,通常使用以下两种方式来定义私有属性和私有方法: 在Python中,可以为实例属性和方法设置私有权限,即设置某个实例属性或实

qq_58698928的博客 1033

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Python基础之day08-面向对象基础3

Python基础之day08-面向对象基础3 文章目录Python基础之day08-面向对象基础3一、二、类方法三、静态方法四、总结实例、类、静态方法 代码仓库地址: https://gitee.com/andox_yj/python 一、 类属性与实例属性介绍: 实例属性: 用法:对象.属性名 = 属性值 或 self.属性名 = 属性值 介绍: 只能用实例对象调用,不可用类对象调用, 只能用实例对象修改,不可用类对象修改。否则只是为类对象创建一个新属性。 类属性: 用法:定义到类里面

weixin_45651291的博客 190

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

python08-类与对象

Day08 类与对象¶ 对象 = 属性 + 方法 对象是类的实例。换句话说,类主要定义对象的结构,然后我们以类为模板创建对象。类不但包含方法定义,而且还包含所有实例共享的数据。 封装:信息隐蔽技术 我们可以使用关键字class定义 Python 类,关键字后面紧跟类的名称、分号和类的实现。 继承:子类自动共享父类之间数据和方法的机制 多态:不同对象对同一方法响应不同的行动 self 是什么? Python 的self相当于 C++ 的this指针。 类的方法与普...

flying_1314的博客 263

day3.08

day3.08-面向对象和json 1. 属性 属性 ''' 定义类就是用代码描述清楚这个类拥有那些相同功能和相同属性的集合,方法(函数)是用来描述相同功能 属性(变量)用来描述相同属性 属性分为两种:类属性、对象属性 1)类属性: a. 怎么定义:直接定义在类中的变量就是类属性 b. 怎么使用:通过'类.'的方法去使用 c.什么时候用:如果属性值不会因为对象不同而不一样的时候 2)对象属性 a. 怎么定义:以'self.属性名 = 值'的方式定义在__init__方法中 b. 怎么使用:通过'对象.

piaoling0626的博客 698

阿里云天池Python训练营--学习day08

python–类与对象 具体学习内容 对象 = 属性 + 方法 对象是类的实例。换句话说,类主要定义对象的结构,然后我们以类为模板创建对象。类不但包含方法定义,而且还包含所有实例共享的数据。 封装:信息隐蔽技术 我们可以使用关键字 class 定义 Python 类,关键字后面紧跟类的名称、分号和类的实现。 class Turtle: # Python中的类名约定以大写字母开头 """关于类的一个简单例子""" # 属性 color = 'green' weight = 1

上善若水 245

Python 单例模式、异常 day 08 am

单例 目标 单例设计模式 new 方法 Python 中的单例 单例设计模式 设计模式 设计模式 是 前人工作的总结和提炼,通常,被人们广泛流传的设计模式都是针对 某一特定问题 的成熟的解决方案 使用 设计模式 是为了可重用代码、让代码更容易被他人理解、保证代码可靠性 单例设计模式 目的 —— 让 类 创建的对象,在系统中 只有 唯一的一个实例 每一次执行 类名() 返回的对象,内存地址是相同...

龙龙的博客 223

Python——面向对象基础(上):析构、继承、类and实例属性和方法、多态(day08)

一、析构方法二、单继承三、多继承四、间接继承五、重写(方法覆盖)和调用父类方法六、类属性和实例属性七、类方法和静态方法 八、多态在python中展现面向对象的三大特征: 封装、继承、多态 封装:指的是把内容封装到某个地方,便于后面的使用 他需要: 把内容封装到某个地方 从另外一个地方去调用被封装的内容 对于封装来说 其实就是使用初始化构造方法将内容封装到对象中,然后通过对象直接或者self来获取被封装的内容继承: 和现实生活当中的继承是一样的:也就是 子可以继承父的内容【属性和行为】(爸爸有的儿子都有,相反

清园暖歌的博客 477

Python学习 Day60 12306抢票 08

12306抢票 一、登录功能

ShengXIABai的博客 786

阿里天池python训练营_day08总结

类与对象 对象 = 属性 + 方法 对象是类的实例。换句话说,类主要定义对象的结构,然后我们以类为模板创建对象。类不但包含方法定义,而且还包含所有实例共享的数据。 封装:信息隐蔽技术 我们可以使用关键字 class 定义 Python 类,关键字后面紧跟类的名称、分号和类的实现。 继承:子类自动共享父类之间数据和方法的机制 多态:不同对象对同一方法响应不同的行动 self 是什么? Python 的 self 相当于 C++ 的 this 指针。 类的方法与普通的函数只有一个特别的区别 —— 它

weixin_45990434的博客 255

Day08: Python魔塔指南:从零打造你的OOP游戏世界

想象你正在设计一款社交应用,每个用户都需要有名字、年龄和个人主页。

yezi1238的博客 250

day31_2025-08-04

虽然 Python 仍是动态类型语言,但类型注解可以提高代码可读性、可维护性,并支持静态类型检查工具(如 mypy)。另一个是pylance,用于代码提示和类型检查,这个插件会根据你的代码中的类型注解,给出相应的提示和检查,比如你定义了一个函数,参数类型是int,那么当你传入一个字符串时,它会提示你传入的参数类型不正确。函数类型注解为函数参数和返回值指定类型,语法为 def 函数名(参数: 类型) -> 返回类型。类属性与方法的类型注解:为类的属性和方法添加类型信息。变量类型注解语法为 变量名: 类型。

m0_62080681的博客 180

day 08

python 面向对象编程 1. 类的 __new__() 方法  定义一个类时,可以用__init__函数来设置类具有的属性,但实际上最先执行的是 __new__ 函数,通过该函数,返回一个 类的实例,这也是为什么init函数有self参数的原因。 class Animal(object): def __new__(cls,*args,**kw): retur

Curry_chicken的博客 406

python学习 --day4

在类方法(使用 @classmethod 装饰的方法)中,cls 作为第一个参数传递给方法。这使得类方法可以访问和修改类属性以及调用其他类方法,而不需要引用具体的实例。super() 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。Python中的魔术方法(Magic Methods)是一种特殊的方法,它们以双下划线开头和结尾,例如__init__,Python的封装是假的(模拟的)封装。

alb3117149013的博客 871

day06-08初识面向对象

一、面向过程 VS 面向对象 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西。优点是:极大的降低了写程序的复杂度,只需要顺着要执行的步骤,堆叠代码即可。缺点是:一套流水线或者流程就是用来解决一个问题,代码牵一发而动全身。应用场景:一旦完成基本很少改变的场景,著名的例子有Linux內核,git,以及Apa...

weixin_30485379的博客 160
上一篇: Python_day_07_面向对象编程
下一篇: Python_day_08_魔术方法
GodDevin
博客等级 码龄9年 39粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值