python模块化 面向对象,Python学习记录4-面向对象,,OOP思想以模块化思

Python学习记录4-面向对象,,OOP思想以模块化思

OOP思想以模块化思想解决工程问题面向过程 vs 面向对象由面向过程转向面向对象常用名词OO:面向对象ooa:分析ood:设计oop:编程ooI:实现ooa -> ood -> ooi类 vs 对象类:抽象,描述的是一个集合,侧重于共性对象:具象,描述的是个体类的内容动作,函数属性,变量

is-a定义类:class关键字类命名:遵循大驼峰第一个字母大写#定义学生类,和几个学生 >>> class Student(): # 此处定义一个空类 # pass是关键字,表示占位用的,无意义 pass # 定义一个对象 >>> xiaobai = Student() >>> class PythonStudent(): name = "NoOne" age = 18 course = "Python" #定义类中的函数,一般需要有self关键字,其余跟普通函数基本相同 >>> def giveMeMoney(): print("给我钱") return None >>> xiaobai = PythonStudent() >>> print(xiaobai.name) >>> print(xiaobai.age) >>> print(xiaobai.course) 输出: NoOne 18 Python

类的属性# 类的例子 # 注意类的定义 >>> class Student(): name = "哈哈哈" age = 19 >>> def sayHi(self): print("小乔要努力变强") return None # 实例化 >>> zhaosi = Student() >>> print(zhaosi.name) >>> zhaosi.sayHi() 输出: 哈哈哈 小乔要努力变强

selfself可以用别的名称代替self不是关键字作用是指代本身# self # 实例调用函数 >>> class Student(): name = "哈哈哈" age = 19 >>> def sayHi(self): # self不是一个关键字 只是一个形参 可以任意替换 print("小乔要努力变强") return None >>> xiaoqiao = Student() # 打招呼 >>> xiaoqiao.sayHi() #上面定义的sayHi()方法 是需要一个参数的 但是这里是默认将调用者放入了 #此时不能再传入参数 会报参数过多的错误 输出: 小乔要努力变强

类的变量作用域的问题类变量:属于类自己的变量实例变量:属于实例的变量访问实例的属性,如果实例没有定义属性,则自动访问类的属性,如果类也没有定义则报错>>> class Student(): # name,age是类的变量 # 注意类的变量的定义位置和方法 # 不需要前缀 name = "哈哈哈" age = 19 >>> def sayHi(self, n, a): self.name = n self.age = a print("My name is {},i am {} years old".format(self.name,self.age)) return None # 实例变量可以使用类的变量 >>> hh = Student() >>> hh.sayHi("嘻嘻",17) >>> print("My name is {},i am {} years old".format(Student.name,Student.age)) >>> print("My name is {},i am {} years old".format(hh.name,hh.age)) 输出: My name is 嘻嘻,i am 17 years old My name is 哈哈哈,i am 19 years old My name is 嘻嘻,i am 17 years old

访问类的属性在类里面如果强制访问类的属性,则需要使用_class_,(注意前后的两个下划线)类方法:定义类的方法的时候,没有self参数类的方法中只允许使用类的内容两种用法ClassNameclass ,前后各两个下划线>>> class Student(): # name,age是类的变量 # 注意类的变量的定义位置和方法 # 不需要前缀 name = "哈哈哈" age = 19 >>> def sayHi(self): print("My name is {},i am {} years old".format(self.name,self.age)) return None # sayHi是类方法 # 如何访问类的变量 # 但是调用需要用到特殊的方法 >>> def sos(): # 类方法中不允许访问实例的任何内容 print("My name is {},i am {} years old".format(Student.name,__class__.age)) return None # 类的方法 >>> s = Student() >>> s.sayHi() >>> Student.sos() 输出: My name is 哈哈哈,i am 19 years old My name is 哈哈哈,i am 19 years old

构造函数类在实例化的时候,执行一些基础性的初始化的工作使用特殊的名称和写法在实例化的时候自动执行是在实例化的时候第一个被执行的函数(此处先这样理解)# 注意类的定义 >>> class Student(): name = "NoName" age = 0 # 构造函数名称固定,写法相对固定 >>> def __init__(self): print("我是构造函数") >>> xiaoming = Student() >>> print("-------------") >>> print(xiaoming.name) >>> print(xiaoming.age) 输出: 我是构造函数 ------------- NoName 0

面向对象的三大特征继承封装多态

继承子类可以使用父类定义的内容或者行为等继承的实现父类、基类、超类:被继承的类,Base Class,Supper Class子类:有继承行为的类所有类都必须有一个父类,如果没有,则默认是object的子类# 所有类必须有父类 # 默认是Object >>> class Person1(): pass >>> class Person2(object): pass >>> class Person(): name = "NoName" age = 0 # 父类写在类定义的时候的括号里 >>> class Teacher(Person): pass >>> t = Teacher() >>> print(t.name) 输出: NoName --------------------------------------------------------------------------------------------------- >>> class Bird(): fly = "I can fly" >>> def flying(self): print("我会飞了") >>> class BirdMan(Person,Bird): pass >>> bm = BirdMan() >>> bm.flying() >>> print(bm.name) 输出: 我会飞了 NoName

issubclass检测是否是子类可以用来检测两个类的父子关系# 利用刚才定义的Bird,BirdMan,Person,Teacher检测父子关系 >>> print(issubclass(BirdMan,Bird)) >>> print(issubclass(BirdMan,Person)) >>> print(issubclass(BirdMan,Teacher)) 输出: True True False

构造函数- 在函数实例化的时候调用的一个函数- 自动调用- 要求,第一个参数必须有,一般推荐self- 构造函数的调用时间:一般认为在实例化的时候第一个被调用- 一般不手动调用,实例化的时候自动调用,参数需写入类名称后面的括号中>>> class Bird(): >>> def __init__(self): print("我被调用了") return None #此时被调用的构造函数 >>> b = Bird() 输出: 我被调用了 --------------------------------------------------------------------------------------------------- # 构造函数2 >>> class Person(): def __init__(self,name,age): print(name,age) >>> p = Person("哈哈哈",19) 输出: 哈哈哈 19

构造函数的继承构造函数默认继承一旦子类定义了构造函数,则不再自动调用父类构造函数# 构造函数默认继承 >>> class Person(): def __init__(self, name, age): print("Person=({},{})".format(name, age)) >>> class Teacher(Person): pass >>> t = Teacher("哈哈哈",19) # 上面的构造函数是需要两个参数的,而下面却没有给出所以会报错 #t = Teacher() 输出: Person=(哈哈哈,19)

总结Python和Java都是面向对象的,因此还是比较好理解的,但是Python定义的语法上还是跟Java有一些区别的,消化吸收,加油。

Python学习记录4-面向对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图像识别技术在病虫害检测中的应用是一个快速发展的领域,它结合了计算机视觉和机器学习算法来自动识别和分类植物上的病虫害。以下是这一技术的一些关键步骤和组成部分: 1. **数据收集**:首先需要收集大量的植物图像数据,这些数据包括健康植物的图像以及受不同病虫害影响的植物图像。 2. **图像预处理**:对收集到的图像进行处理,以提高后续分析的准确性。这可能包括调整亮度、对比度、去噪、裁剪、缩放等。 3. **特征提取**:从图像中提取有助于识别病虫害的特征。这些特征可能包括颜色、纹理、形状、边缘等。 4. **模型训练**:使用机器学习算法(如支持向量机、随机森林、卷积神经网络等)来训练模型。训练过程中,算法会学习如何根据提取的特征来识别不同的病虫害。 5. **模型验证和测试**:在独立的测试集上验证模型的性能,以确保其准确性和泛化能力。 6. **部署和应用**:将训练好的模型部署到实际的病虫害检测系统中,可以是移动应用、网页服务或集成到智能农业设备中。 7. **实时监测**:在实际应用中,系统可以实时接收植物图像,并快速给出病虫害的检测结果。 8. **持续学习**:随着时间的推移,系统可以不断学习新的病虫害样本,以提高其识别能力。 9. **用户界面**:为了方便用户使用,通常会有一个用户友好的界面,显示检测结果,并提供进一步的指导或建议。 这项技术的优势在于它可以快速、准确地识别出病虫害,甚至在早期阶段就能发现问题,从而及时采取措施。此外,它还可以减少对化学农药的依赖,支持可持续农业发展。随着技术的不断进步,图像识别在病虫害检测中的应用将越来越广泛。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值