python中类的属性有哪几种_python中的类和对象,属性和方法-程序员宅基地

技术标签: python中类的属性有哪几种  

一、面向对象的概述

面向对象是一种描述业务问题、设计业务实体和实体之间关系的方法

二、类和对象

1、类和对象得区别:类是对客观世界中事物得抽象,而对象是类实例化后的实体

例如:汽车模型就是一个类,制造出来的每辆汽车就是一个对象

2、类的定义:

(1)python使用class关键字定义一个类,类名的首字母一般要大写:

例如:

class Student: #定义了一个Student类

(2)类的主体由一系列的属性和方法组成

例如:

class Fruit: #定义一个类

def __init__(self): #类的构造函数,用于初始化类的内部状态,为类的属性设置默认值

self.name=name #定义name属性

self.color=color #定义color属性

def grow(self): #定义一个函数,为类的函数,称为方法;它至少有一个参数self

print(‘Fruit grow’)

3、对象的创建:

创建对象的过程称为实例化,当一个对象被创建后,包含3个方面的特性:对象的句柄、属性和方法

对象的句柄:用于区分不同的对象

例如:

if __name__=="__main__" #当程序作为主程序运行

fruit=Fruit() #实例化:创建一个对象,创建了一个Fruit对象

fruit.grow() #对象调用grow()方法

4、类的属性和方法

(1)类的属性:一般分为公有属性和私有属性,默认情况下所有得属性都是公有的,如果属性的名字以两个下划线开始,就表示为私有属性,没有下划线开始的表示公有属性。 python的属性分为实例属性和静态属性,实例属性是以self为前缀的属性,如果构造函数中定义的属性没有使用self作为前缀声明,则该变量只是普通的局部变量,类中其它方法定义的变量也只是局部变量,而非类的实例属性。

例如:

class Fruit:

price=0 #定义一个类属性

def __init__(self): #构造函数

self.color="red" #实例属性,以self为前缀

zone="China" #局部变量,不以self为前缀

if __name__=="__main__":

print(Fruit.price) #使用类名调用类变量 0

apple=Fruit() #实例化apple

print(apple.color) #打印apple实例的颜色 red

Fruit.price=Fruit.price+10 #将类变量+10

print("apple‘s price:",+str(apple.price)) #打印apple实例的price 10

banana=Fruit() #实例化banana

print("banana‘s price:"+str(banana.price)) #打印banana实例的price 10

注意:python的类和对象都可以访问类属性;类的外部不能直接访问私有属性(属性名以两个下划线开始),当把上面的self.color=color改为self.__color="red",再次执行print(Fruit.__color)的时候就会报错

(2)类的方法:类的方法也分为公有方法和私有方法,私有方法不能被模块外的类或者方法调用,也不能被外部的类或函数调用。python利用staticmethon或@staticmethon 修饰器把普通的函数转换为静态方法

class Fruit:

price=0 #类变量

def __init__(self): #构造函数

self.__color="red" #定义一个私有属性,类的外部不能直接访问

def getColor(self): #类方法

print(self.__color) #打印出私有变量

@staticmenthod #使用修饰器静态方法

def getPrice(): #定义一个类方法

print(Fruit.price) #打印类变量

def __getPrice(): #定义私有函数,不能被模块外的类或者方法调用

Fruit.price=Fruit.price+10 #类变量+10

print(Fruit.price)

count=staticmenthod(__getPrice) #定义静态方法

if __name__=="__main__":

apple=Fruit() #实例化apple

apple.getColor() #使用实例私有变量, red;因为创建了对象apple,所以静态属性price执行一次

Fruit.count() #使用列名直接调用静态方法 10

banana=Fruit() #实例化 创建banana对象,所以静态属性第三次执行

Fruit.count() #实例调用静态方法 20

Fruit.getPrice() # 20

(3)内部类的使用:在类的内部定义类

内部类中的方法可以使用两种方法调用:

第一种:直接使用外部类调用内部类,生成内部类的实例,在调用内部类的方法

object_name = outclass_name.inclass_name()

object_name.method()

第二种:先对外部类进行实例化,然后再实例化内部类,最后调用内部类的方法

out_name = outclass_name()

in_name = out_name.inclass_name()

in_name.method()

(4)__init__方法:构造函数用于初始化类的内部状态,为类的属性设置默认值(是可选的)。如果不提供__init__方法,python将会给出一个默认的__init__方法

class Fruit:

def __init__(self, color):

self.__color = color

print( self.__color)

def getColor(self):

print( self.__color)

def setColor(self, color):

self.__color = color

print(self.__color)

if __name__ == ‘__main__‘:

color = ‘red‘

fruit = Fruit(color) #red

fruit.getColor() #red

fruit.setColor(‘blue‘) #blue

(5)__del__方法:构析函数用来释放对象占用的资源(是可选的)。如果程序中不提供构析函数,python会在后台提供默认的构析函数;所以只有在需要的时候才会定义构析函数

————————————————

版权声明:本文为CSDN博主「General_单刀」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_28284093/article/details/80092544

原文地址:https://www.cnblogs.com/xinhuang/p/12288848.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39928818/article/details/110279986

智能推荐

数模3—Matlab线性规划、非线性规划、多目标规划(超全解法合集)-程序员宅基地

文章浏览阅读1.9w次,点赞49次,收藏461次。生产两种机床,利润分别为XXX, A机器和B机器加工,两种机器工作时间…若不存在不等式约束,用"[]”代替A和b: [x, fval ] = linprog (f,[],[], Aeq, beq, lb, ub)若不存在等式约束,用"[]”代替Aeq和beq: [x, fval ] = linprog Cf,A,b,[],[] ,lb,ub)A机器和B机器加工,有顺序要求,有不同损耗费用,不同的工作时间…每种资产的平均收益率…结论,4个人攻碉楼,2个人追替身的情况下,百姓的士气最大,最大值为220。_线性规划

stm32f103运行python_microPython 有没有在 STM32F103上运行的固件-程序员宅基地

文章浏览阅读1.7k次。匿名用户1级2017-02-20 回答进入第一个个连接进入之后我们就可以选择红色方框Buid Firmware。之后我们就可以下载相应的固件了,但是这个固件是比较早的就是了,是2015年的固件,所以我们接下来要做的就是来自己编译一个固件。首先我们需要将我们的micropython的github开源项目的内容下载下来。选择下图的图标就是可以下载下来。或者在window或者linux底下直接使用Git..._micropython stm32f103

RK3568平台(时间篇)linux内核延时机制_linux延时-程序员宅基地

文章浏览阅读736次,点赞26次,收藏18次。内核中涉及的延时主要有两种实现方式:忙等待或者睡眠等待。前者阻塞程序,在延时时间到达前一直占用CPU,而后者是将进程挂起(置进程于睡眠状态并释放CPU资源)。所以,前者一般用在延时时间在毫秒以内的精确延时,后者用于延时时间在毫秒以上的长延时。为了充分利用 CPU 资源,使系统有更好的吞吐性能,在对延迟时间的要求并不是很精确的情况下,睡眠等待通常是值得推荐的。_linux延时

集合遍历与删除,java list 交集 并集 差集 去重复并集-程序员宅基地

文章浏览阅读75次。2019独角兽企业重金招聘Python工程师标准>>> ..._java 遍历出所有差集

挑战世界顶级十七项编程-程序员宅基地

文章浏览阅读929次。众所周知,编程几乎已经成为各行各业不可或缺的重要技能储备,它能够以无法替代的方式帮助我们组织并维护大型系统,因此如今越来越多的人才也开始踏上这条学习之路。

从零开始搭建Hadoop_创建一个hadoop项目-程序员宅基地

文章浏览阅读331次。第一部分:准备工作1 安装虚拟机2 安装centos73 安装JDK以上三步是准备工作,至此已经完成一台已安装JDK的主机第二部分:准备3台虚拟机以下所有工作最好都在root权限下操作1 克隆上面已经有一台虚拟机了,现在对master进行克隆,克隆出另外2台子机;1.1 进行克隆21.2 下一步1.3 下一步1.4 下一步1.5 根据子机需要,命名和安装路径1.6 ..._创建一个hadoop项目

随便推点

Google 安装印象笔记剪藏插件_manifest version 2 is deprecated, and support will-程序员宅基地

文章浏览阅读1w次,点赞3次,收藏4次。有时候我们看到较好的网页内容,希望能够保存到自己的笔记中,方便以后的查看有学习。以往我们习惯搜藏网页,但是时间一长容易忘记已收藏的内容,同时有些东西也会随着原作者删除内容而导致之前收藏过的内容无法看到。为此 使用一款笔记工具保存自己想收藏的内容是十分必要的。https://yinxiang.com/product/webclipper/install/可以安装多种浏览器的插件:这里一安装 谷歌浏览器的插件为例。点击下述网址可以查看官方安装插件的说明。https://yinxiang.com/webclipp_manifest version 2 is deprecated, and support will be removed in 2024. see h

用好ASP.NET 2.0的URL映射-程序员宅基地

文章浏览阅读68次。简介:   URL映射是ASP.NET 2.0中提供的新特性。URL映射技术帮助我们将一个特定URL映射为另一个URL。为了帮助理解,我们假设你在站点有一个叫Homepage.aspx的页面来访问主页,所有的用户也都用这个页面来访问你的主页。但由于某些原因,你要将主页改为OriginalHome.aspx。此时使用URL映射让你可以映射到新页面,而不必通知用户。   如果我们设置了URL...

C语言等级考试是把题目删了,历年全国计算机的等级考试二级C语言上机考试地训练题目库及答案详解(72页)-原创力文档...-程序员宅基地

文章浏览阅读90次。实用标准文案1. 填空给定程序的功能是调用 fun 函数建立班级通讯录。 通讯录中记录每位学生的编号,姓名和电话号码。 班级的人数和学生的信息从键盘读入, 每个人的信息作为一个数据块写到名为 myfile5.dat 的二进制文件中。请在程..._c语言二级填空题可以删填空之外的东西嘛

Microsoft Office显示正在更新无法打开的问题_正在更新microsoft 365和office-程序员宅基地

文章浏览阅读3.9k次,点赞4次,收藏2次。问题:点击图标,显示正在更新,但打不开PPT、Word和Excel方法: 搜索电脑上的“服务”应用,重新启动Microsoft Office Click-To-Run Services即可_正在更新microsoft 365和office

非常好的Ansible入门教程(超简单)-程序员宅基地

文章浏览阅读10w+次,点赞56次,收藏431次。Ansible是一个配置管理和配置工具,类似于Chef,Puppet或Salt。这是一款很简单也很容易入门的部署工具,它使用SSH连接到服务器并运行配置的任务,服务器上不用安装任何多余的软件,只需要开启ssh,所有工作都交给client端的ansible负责。 关于Ansible的一个好处是,将bash脚本转换为可执行任务是非常容易的。我们可以编写自己的配置程序,但是Ansible更加干净,因为它_ansible

【Gradle-8】Gradle插件开发指南-程序员宅基地

文章浏览阅读1k次。编写一个插件Plugin其实挺简单的,只需要实现Plugin接口,并实现唯一apply方法即可。我们就直接写在@Overrideprintln("这是插件:${this.class.name}")这实际上是一个内联类。写完别忘了apply依赖上。第9行的apply方法是调用的PluginAware接口的apply()方法,参数是一个map,用来映射Plugin Id。这是插件:YechaoaPlugin...在上一文。_gradle插件开发