面向对象编程(一)

面向对象知识

# 面向对象
# 类的定义
‘‘‘
基本形式:
class ClassName(object):
               Statement

    1.class定义类的关键字
    2.ClassName类名,类名的每个单词的首字母大写。
    3.object是父类名,object是一切类的基类。在python3中如果继承类是基类可以省略不写。
‘‘‘

# 类的初始化
#   __init__
‘‘‘
定义类时,这种方法可以使类对象实例按某种特定的模式生产出来。

后面的参数中第一个参数我们约定俗成的为self参数名,
self代表的是在类实例化后这个实例对象本身。

初始化函数除了有self这个参数表示实例对象本身之外,
其他的参数的定义也遵循函数的必备参数和默认参数一样的原则,
必备参数就是在实例化是一定要传入的参数,
默认参数就是在定义时可以给这个参数一个初始值。
‘‘‘

# 类的实例化
‘‘‘
基本形式:实例对象名 = 类名(参数)

在实例化的过程中,self代表的就是这个实例对象自己。

实例化时会把类名后面接的参数传进去赋值给实例,
这样传进去的参数就成为了这个实例对象的属性。

实例化的过程遵循函数调用的原则。
在实例化时也必须个数和顺序与定义时相同(使用关键字参数可以改变传参的顺序)。
当初始化函数定义时使用了默认参数时,在实例化时默认参数可以不传参这时
这个实例对象就会使用默认的属性,如果传了参数进去则会改变这参数值,
使实例化对象的属性就为你传进来的这个参数。

isinstance(实例名,类名)
判断一个实例是不是这个类的实例。
‘‘‘
# 类的定义
class Fruits:
    fruits = ‘xxxxxx‘    # 类属性
    def __init__(self,name,color,weight=90):
        self.name = name
        self.color = color
        self.weight = weight
        self.fruits = ‘yyyyy‘   # 实例属性
    def show(self):
        print(‘我的重量是%s‘% self.color)

class Apple(Fruits):
    def __init__(self,color,weight,shape):
        Fruits.__init__(self,‘apple‘,color,weight)    # 调用父类的初始化函数
        self.shape = shape
    def eat(self):
        print(‘被吃掉了。。。。‘)

ap1 = Apple(‘red‘,100,‘圆的‘)
# 类的实例化
fr1 = Fruits(‘apple‘,‘red‘)
fr2 = Fruits(‘banana‘,‘yellow‘)
fr3 = Fruits(‘apple‘,‘green‘,100)
# 类和实例属性
‘‘‘
类属性
.类属性是可以直接通过“类名.属性名”来访问和修改。
.类属性是这个类的所有实例对象所共有的属性,
 任意一个实例对象都可以访问并修改这个属性(私有隐藏除外)。
.对类属性的修改,遵循基本数据类型的特性:列表可以直接修改,字符串不可以,
 所以当类属性是一个列表时,通过任意一个实例对象对其进行修改。
 但字符串类型的类属性不能通过实例对象对其进行修改。

实例属性
.在属性前面加了self标识的属性为实例的属性。
.在定义的时候用的self加属性名字的形式,在查看实例的属性时
 就是通过实例的名称+‘.’+属性名来访问实例属性。

方法属性
.定义属性方法的内容是函数,函数的第一个参数是self,代表实例本身。

一些说明:
.数据属性会覆盖同名的方法属性。减少冲突,可以方法使用动词,数据属性使用名词。
.数据属性可以被方法引用。
.一般,方法第一个参数被命名为self,,这仅仅是一个约定,
 self没有特殊含义,程序员遵循这个约定。
.查看类中的属性和实例属性可以调用__dict__方法返回属性组成的字典。
‘‘‘
# 私有变量和类本地变量。
‘‘‘
以一个下划线开头的命名(无论是函数,方法或数据成员),
都会被隐藏起来。但直接将命名完整的写下还是一样可以访问到。
单下划线只是隐藏了属性,但还是可以从外部访问和修改。
以两个下划线开头的命名,一样会被隐藏,只能在内部访问和修改,
不能在外部访问,因为它变成了“_类名__属性”的形式。
在外部只能通过这种形式才能访问和修改。
双下划线开头的属性就变成了私有变量,即使能改也不要在外部外部修改了。
私有变量的作用就是确保外部代码不能随意修改对象内部的状态。
‘‘‘
# 数据封装:
‘‘‘
.在类里面数据属性和行为用函数的形式封装起来,
 访问时直接调用,不需知道类里面具体的实现方法。
‘‘‘
# 继承:
‘‘‘
.在定义类时,可以从已有的类继承,
 被继承的类称为基类,新定义的类称为派生类。

.在类中找不到调用的属性时就搜索基类,
 如果基类是从别的类派生而来,这个规则会递归的应用上去。
 反过来不行。

.如果派生类中的属性与基类属性重名,那么派生类的属性会覆盖掉基类的属性。
 包括初始化函数。

.派生类在初始化函数中需要继承和修改初始化过程,
 使用’类名+__init__(arg)’来实现继承和私有特性,也可以使用super()函数。

issubclass(类名1,类名2)
判断类1是否继承了类2
‘‘‘
# 多态:
‘‘‘
.多态是基于继承的一个好处。

.当派生类重写了基类的方法时就实现了多态性。
‘‘‘:

代码示例:

 1 ‘‘‘
 2 一、根据课堂上讲的内容写个人的类。
 3   要求:
 4       1. 属性包含姓名,性别,年龄。
 5       2.方法可以自己随便写。
 6
 7 ‘‘‘
 8 class Human:
 9     def __init__(self,name,sex,age,hobby,reading):
10         self.name = name
11         self.sex = sex
12         self.age = age
13         self.hobby = hobby
14         self.reading = reading
15     def sleep(self):
16         print(‘%s每天晚上在10:00前必须睡觉‘ % self.name)
17
18     def active(self):
19         print(‘%s喜欢%s,不喜欢%s‘ %(self.name,self.hobby,self.reading))
20
21 print(‘####################第一题代码输出#########################‘)
22 person1 = Human(‘小明‘,‘男‘,‘21‘,‘swimming‘,‘story‘)
23 person1.sleep()
24 person1.active()
25
26 person2 = Human(‘吉米‘,‘女‘,‘20‘,‘basketball‘,‘picutre‘)
27 person2.sleep()
28 person2.active()
29 print(‘\n‘)
30
31 ‘‘‘
32 二、写一个学生的类,学生的类继承了人的类。
33    要求:
34        1.在继承人的属性的基础上增加成绩这一属性。
35        2.把之前分数等级测试的函数写到这个类里,作为这个类的一种方法。
36        提示:把input和循环语句都删掉,只留下if判断。
37 ‘‘‘
38
39 class Student(Human):
40     def __init__(self,score):
41         self.score = score
42
43     def info(self):
44         print(‘my name is %s,I am %s, and %s years,I like %s‘ %(self.name,self.sex,self.age,self.hobby))
45     def test(self):
46             if type(self.score) == int or type(self.score)==float:
47                 self.score = float(self.score)
48                 if 90 <= self.score <=100:
49                     print(‘成绩为:A‘)
50                 elif 80<=self.score<90:
51                     print(‘成绩为:B‘)
52                 elif 60<=self.score<80:
53                     print(‘成绩为:C‘)
54                 elif 0<=self.score<60:
55                     print(‘成绩为:D‘)
56                 else:
57                     print(‘输入有误!‘)
58             else:
59                 print(‘输入有误,请重新输入‘)
60
61 print(‘####################第二题代码输出#########################‘)
62 student1=Student(8.1)
63 student1.test()
64 student2=Student(80.5)
65 student2.test()
66 student3=Student(91)
67 student3.test()
68
69 student4= Student(98)
70 student4.name = ‘alex‘
71 student4.sex=‘男‘
72 student4.age=25
73 student4.hobby=‘walking‘
74 student4.info()
时间: 2024-10-13 07:21:07

面向对象编程(一)的相关文章

面向对象编程

面向对象:类,属性,方法 面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的"对象",每个对象都拥有相同的方法,但各自的数据可能不同. 仍以Student类为例,在Python中,定义类是通过class关键字: class Student(object): pass class后面紧接着是类名,即Student,类名通常是大写开头的单词,紧接着是(object),表示该类是从哪个类继承下

python面向对象编程

java和c#只支持面向对象编程,python即可支持面向对象也可以支持函数式编程. 面向对象两个重要的概念:  1.类 2.对象 函数式 def sendemail(email,msg):            函数 print("8888") 面向对象 class Myclass: def sendmail(self,email,msg):      函数定义在类中第一个参数必须是self print("8888")              函数在类中定义叫方

面向对象编程的一些理解

(1) 简单的说类是对象的模版. 首先我们可以来理解一下对象的概念,面向对象编程的程序实际就是多个对象的集合,我们可以把所有的事物都抽象成对象,在程序设计中可以看作:对象=属性+方法.属性就是对象的数据,而方法就是对象的行为. 下面来说类,就像我开头所说类是对象的模版,而对象是类的实例化.举个例子,饼干模子可以看作是类,而具体的饼干就是对象.再比如有一个类是表示人,然后可以通过人这个模版来实例化出张三.李四... 比如说一个类是描述人的特征,为什么实例化? p = People(); 这个人有很

Python之路【第五篇】:面向对象编程

面向对象编程思维导向图 http://naotu.baidu.com/file/03516c91377d6cad0ded041aa4ce4433?token=ccaba09527261666 密码: Tim 面向:过程.函数.对象 面向过程:根据业务逻辑从上到下写垒代码! 面向过程的编程弊:每次调用的时候都的重写,代码特别长,代码重用性没有,每次增加新功能所有的代码都的修改!那有什么办法解决上面出现的弊端呢?函数就出现了. 面向函数:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可!

C++ Primer 学习笔记_73_面向对象编程 --再谈文本查询示例

面向对象编程 --再谈文本查询示例 引言: 扩展第10.6节的文本查询应用程序,使我们的系统可以支持更复杂的查询. 为了说明问题,将用下面的简单小说来运行查询: Alice Emma has long flowing red hair. Her Daddy says when the wind blows through her hair, it looks almost alive, like a fiery bird in flight. A beautiful fiery bird, he

C++ Primer 学习笔记_74_面向对象编程 --再谈文本查询示例[续/习题]

面向对象编程 --再谈文本查询示例[续/习题] //P522 习题15.41 //1 in TextQuery.h #ifndef TEXTQUERY_H_INCLUDED #define TEXTQUERY_H_INCLUDED #include <iostream> #include <fstream> #include <sstream> #include <vector> #include <set> #include <map&g

面向对象编程---图片轮播

今天复习了一下面向对象编程,下面是我的效果图 看着这个图片你会觉得这没有什么,那么上代码: html部分: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6 <style> 7 ul,ol,li{padding:0;margin:0;li

《Java面向对象编程第二版》今年出版以来获得读者一致好评。

<Java面向对象编程第一版>自2016年出版以来,承蒙读者们的厚爱,至今已经重印了二十多次,成为国内Java领域里的经典Java技术宝典.在当当网上获得了1500多条好评: http://product.dangdang.com/9186890.html?point=comment_point 应广大读者的要求,为第一版进行了升级,第二版融合了最新的Java8的语言特性,它继续为Java开发人员们提供丰富全面的技术支持和帮助.在京东网上读者们对第二版的好评如潮,一致认为这是Java开发人员必

面向对象编程与面向过程编程的区别与联系

LinuxC编程的学习已经告一段落,这段开始学C++.C++是面向对象编程,C语言是面向过程编程.因此学习C++的第一件事就是要弄明白什么是面向过程编程,什么是面向对象编程. 之前学习的C语言是面向过程编程,回想一下C语言编程的过程.主函数,定义变量,调用函数然后实现.面向过程编程是一种非常具体,要面面俱到的的编程方式.而面向对象是以对象为单位来进行编程,比较像正常人的思维. 下面我们举个例子,比如开车.加速.减速.刹车. 用面向过程来说就是你要先有一个车,然后这四个分别是4件事,也就是说你要写

go语言学习(五)——面向对象编程

主要讲的是"类"和接口&和其他传统语言不一样的地方挺多的,断断续续看了好几天 下面是我的练习代码 // GoStudy0219 project main.go /* go语言学习--面向对象编程(1) go中类型的值语义和引用语义 结构体(类)的定义和初始化 */ package main import ( "fmt" ) func main() { //几种"类"的初始化 v1 := &character{"Tom&q