Python 中的类声明、用法、属性和示例
最编程
2024-05-26 17:48:35
...
Python中的类的定义以及使用:
类的定义:
定义类 在Python中,类的定义使用class关键字来实现 语法如下:
class className:
"类的注释"
类的实体 (当没有实体时 使用pass代替)
下面定义一个鸟类;
class flyBord:
"""鸟类"""
pass #这里我们并没有实体所以我们使用pass代替
这就是一个类的最基本的定义
类中的__init__函数:类似于java中的构造函数,以及类的使用 实例如下:
#eg:定义一个狗类
class Dog:
def __init__(self): #方法名为 __init__ 形参必须要带一个self 当然也可以别名 self习惯使然
print("我是一只小狗")
#创建一个实例
dog_1 = Dog() #创建类的实例,也就是调用这个类
注意这里的方法__intit__(self)下划线是前面两个下划线,后面两个下划线,并不是一个下划线。
输出结果如下:
我是一只小狗
当一个类的实例被创建出来的时候__init__(self)方法就会被自动调用,类似于java,C#中的构造函数。
类中的类属性与实例属性:
实例如下:
#eg:定义一个猫类
class cat:
"""猫类"""
name = "小花" #类属性 可以通过类来调用
# __init__为实例方法
def __init__(self): #self为实例参数
self.name_1 = "小强" #实例属性 定义时必须要用实例参数.出来
那么接下来我们分别调用它的类属性,实例属性
#cat_1为实例名称
cat_1 = cat()
print(cat.name) #调用它的类属性
print(cat_1.name) #通过实例参数调用类属性
print(cat_1.name_1) #调用实例属性
接下来我们看一下输出结果:
小花
小花
小强
可以根据调用时使用的属性以及输出结果看到:
通过类名只可以调用类属性 通过实例名称可以调用类属性也可以调用实例属性
计算属性 在Python中,可以通过@property(装饰器)将一个方法转换为属性,从而实现用于计算的属性。 将方法转换为属性后,可以直接通过方法名来访问方法,而不需要再添加一对小括号"()",这样可以让代码更加简洁
#通过@property创建用于计算的属性的语法格式如下:
#eg:
"""
@property @property 装饰器
def methodname(self): methodname:用于指定方法名,一般使用小写字母开头。该名称最后将作为创建的属性。 self:必要参数
block block:方法体,实现具体的功能,可以通过pass代替
"""
下面定义一个类来具体实现矩形面积的求法:
#eg:
class Rect:
def __init__(self,height,width):
self.height = height
self.width = width
@property
def arae(self):
return self.height*self.width
创建这个类的实例并且调用已经被写成计算属性的方法arae:
temp = Rect(800,600)
print(temp.arae)
输出结果如下:
480000
可以看到我们在通过temp实例调用方法arae()时并没有带小括号(),因为arae()方法已经被我们写成了计算属性
继承的定义:
在编写类的时候,并不是每一次都要从空白开始编写,当要编写的类和另外一个已经存在的类存在一定的继承关系时,就可以通过继承来达到代码的重用的目的,提高开发效率。就如同在自然现象中的我们每个人都从父辈祖辈哪里继承了很多的特征,但又不完全是他们,我们又有自己的一些特征,在编程中被继承的类叫做父类或基类,新的类叫做基类或者派生类。
继承的语法:
"""
class ClassName(baseclasslist): #ClassName派生类的类名 baseclasslist:被继承的父类;被继承的父类可以有多个
'''类的帮助文档''' 帮助文档 可以在创建对象的时候输入类名和'('时可以查看
statement 类体 可以使用pass替代
"""
下面定义两个父类在(父类中创建一个实例函数)和一个子类 子类继承父类:
class father:
def __init__(self):
print("我是父亲")
class mather:
def __init__(self):
print("我是母亲")
class son(father,mather):
pass
创建子类son的实例,并查看输出结果。
son = son()
#输出结果:
我是父亲
可以看到子类是没有实例函数__init__()的,
但是创建实例的时候依然有输出结果,并且是调用了父类father的实例函数,
但是并没有调用父类mather类的实例函数,可见当子类继承了父类之后,
子类也会继承父类的函数,包括实例函数,但是只会继承第一个父类的函数
方法的重写: 当子类继承了父类的函数之后,函数是子类需要的,但是函数体又不是子类需要的。 这时子类就要对父类的方法进行重写
下面直接进行实例代码:
#eg:
class Fruit:
"""水果类"""
color = "绿色"
def harvest(self,color):
print("水果是"+color+"的!")
print("水果已经收获.....")
print("水果原来是"+self.color+"的!")
class Orange(Fruit):
"""橘子类继承自水果类"""
color = "橙色"
def __init__(self):
print("\n我是橙子")
def harvest(self,color):#重写父类函数harvest
print("橘子是"+color+"的!")
print("橙子已经收获......")
print("橙子原来是"+self.color+"的!")
#创建Orange的对象
oran = Orange()
oran.harvest("黄色")
输出结果如下:
我是橙子 #子类Orange的构造函数
橘子是黄色的!
橙子已经收获......
橙子原来是橙色的!
#这三句是子类继承自父类Fruit的函数,但是函数体与父类的函数体不同也就是我们说的重写
可以看到我们调用了继承自Fruit的方法harvest但是输出内容与父类的方法体不同,是因为我们在子类Orange中将harvest函数的函数体重写了
下面直接来一个小练习,废话不多说直接上代码:
"""
练习 设计药品类medicine
"""
from datetime import datetime
class Medicine:
name = ''
price = 0
PD = ''
Exp = ''
def __init__(self,name,price,PD,Exp):
self.name = name #药名
self.price = price #价格
self.PD = PD #生产日期
self.Exp = Exp #失效日期
def get_name(self):
return self.name
def get_GP(self):
start = datetime.strptime(self.PD, '%Y-%m-%d')
end = datetime.strptime(self.Exp,'%Y-%m-%d')
return (end - start).days
med = Medicine(name='格列宁',price=25000,PD='2018-9-8',Exp='2020-9-8')
name = med.get_name()
GP = med.get_GP()
print(name)
print(GP)
输出结果:
格列宁
731
上一篇: Python 中的类概述
下一篇: Python 类属性、类方法和静态方法
推荐阅读
-
通过 Vue 中的 v-bind 增强样式控制--(通过 v-bind 操作类和操作样式属性的详细说明,附示例和代码)
-
Java 8新特性探究(十三)JavaFX 8新特性以及开发2048游戏-JavaFX历史## 跟java在服务器端和web端成绩相比,桌面一直是java的软肋,于是Sun公司在2008年推出JavaFX,弥补桌面软件的缺陷,请看下图JavaFX一路走过来的改进 从上图看出,一开始推出时候,开发者需使用一种名为JavaFX Script的静态的、声明式的编程语言来开发JavaFX应用程序。因为JavaFX Script将会被编译为Java bytecode,程序员可以使用Java代码代替。 JavaFX 2.0之后的版本摒弃了JavaFX Script语言,而作为一个Java API来使用。因此使用JavaFX平台实现的应用程序将直接通过标准Java代码来实现。 JavaFX 2.0 包含非常丰富的 UI 控件、图形和多媒体特性用于简化可视化应用的开发,WebView可直接在应用中嵌入网页;另外 2.0 版本允许使用 FXML 进行 UI 定义,这是一个脚本化基于 XML 的标识语言。 从JDK 7u6开始,JavaFx就与JDK捆绑在一起了,JavaFX团队称,下一个版本将是8.0,目前所有的工作都已经围绕8.0库进行。这是因为JavaFX将捆绑在Java 8中,因此该团队决定跳过几个版本号,迎头赶上Java 8。 ##JavaFx8的新特性 ## ###全新现代主题:Modena 新的Modena主题来替换原来的Caspian主题。不过在Application的start方法中,可以通过setUserAgentStylesheet(STYLESHEET_CASPIAN)来继续使用Caspian主题。 参考http://fxexperience.com/2013/03/modena-theme-update/ ###JavaFX 3D 在JavaFX8中提供了3D图像处理API,包括Shape3D (Box, Cylinder, MeshView, Sphere子类),SubScene, Material, PickResult, LightBase (AmbientLight 和PointLight子类),SceneAntialiasing等。Camera类也得到了更新。从JavaDoc中可以找到更多信息。 ###富文本 强化了富文本的支持 ###TreeTableView ###日期控件DatePicker 增加日期控件 ###用于 CSS 结构的公共 API
-
解析Python中的类的方法和概念
-
使用matplotlib在Python中实现正弦信号的时域波形和频谱图示例
-
用C均值聚类算法在Excel中轻松处理和分类数据(详解+Python代码示例)
-
理解Python中的逻辑运算符 and、or 和 not 的用法
-
HTML技巧:锚点定位和预格式化文本的使用" 1. 创建锚点链接以便快速定位目标内容 - 在需要被链接的目标位置添加相应id名 - 示例:<h3 id="two">第2集</h3> - 创建包含目标链接的超链接,只需在href属性中输入#后面跟着id名即可 - 示例:<a href="#two">点击这里跳转到第2集</a> 2. 预格式化文本:使用pre标签来保留原始格式 - pre标签可以用于显示源代码、数学公式等需要保持格式的内容 - 示例: <p> 这是一段预格式化后的文本, 可以看到这里的换行符、空格等都得到了保留。 </p> <pre> 这也是一段预格式化后的文本, 可以看到这里的换行符、空格等都得到了保留。 </pre>
-
Java中的包、类和属性命名规则
-
如何在Python中轻松创建、调用和理解def函数,以及参数传递的实际操作与示例代码
-
在Python 3中玩转 bytes 和 str:基础用法、不同编码间的转换以及列表、元组与字符串之间的互变技巧