#1、python中,类名首字母都大写
#2、在python3中,经典类和新式类没有任何区别
#3、在python2中,经典类和新式类的区别主要体现在多继承上,经典类是深度优先,新式类是广度优先
#4、在python3中,都是广度优先 #定义一个【经典类】
class Japanese:
pass #定义一个【新式类】
class Chinese(object):
pass print("=============定义一个类===========")
 class Person(object):

     #构造函数:可有可无,不是必须存在的
#在实例化一个类的对象时,自动执行构造函数,不需要我们手动显式的调用构造函数
def __init__(self,skin='white',nose='high',eye='blue'):
self.skin_color = skin
self.nose = nose
self.eye_color = eye
self.__language='english' # 析构函数:在实例被销毁的时候自动执行,不需要我们手动调用析构函数
# 析构函数可有可无,不是必须存在的,一般可在该函数中,执行一些关闭数据连接的操作
def __del__(self):
# ..........
# ..........
# .......... 此处省略掉关闭数据库连接的代码行
pass # 类变量:公共的变量,每个实例都可以用
country = 'usa'
#实例变量:比如前面构造函数中的【self.nose】,【self.skin_color】等,可以在所有实例方法中访问,也可以在类外部访问
#私有变量:比如前面构造函数中的【self.__language】,只能在类内部访问,类外部无法访问到,变量名是两个下划线开头命名的 #实例方法:self代表本类对象
#可以访问类变量和类方法
#可以访问静态方法
#可以访问属性方法
def run(self):
print(self.country)
self.eat_class_1()
self.sleep_static_1()
self.walk_property_1
self.run_1() def run_1(self):
print("实例方法") #属性方法:通过实例对象调用,不要通过类进行调用
@property
def walk_property(self):
print(self.country)
self.eat_class_1()
self.sleep_static_1()
self.run_1()
self.walk_property_1 @property
def walk_property_1(self):
print("属性方法") #类方法:
# 1、不用实例化就可以直接调用
# 2、它可以通过cls使用类变量
# 3、它不能调用这个类里面的其他实例方法和实例变量
# 4、可以访问静态方法
# 5、cls代表对的就是Person
@classmethod
def eat_class(cls):
print(cls.country)
cls.sleep_static_1()
cls.walk_property_1
cls.eat_class_1() @classmethod
def eat_class_1(cls):
print('类方法') #静态方法
# 1、一个普通函数,只不过是写在类里面而已,它用不了类变量、类方法、实例变量、实例方法、属性方法、静态方法
@staticmethod
def sleep_static():
try:
self.run_1()
except Exception as e:
print(e)
try:
self.walk_property_1
except Exception as e:
print(e) try:
self.sleep_static_1()
except Exception as e:
print(e) try:
self.eat_class_1()
except Exception as e:
print(e) @staticmethod
def sleep_static_1():
print('这个是静态方法,它和一个没写在类里面的函数一样') #私有方法:只能在类内部访问,类外部无法访问到,方法名是两个下划线开头命名的
def __speak(self):
print ("这是个私有方法") #实例方法:方法名是一个下划线开头命名的
def _shopping(self):
self._flower = "rose"
print("方法名一个下划线开头的实例方法") def tool(self):
print(self.__language)
return self.__speak()

print("==========修改类变量===========")
 #实例化两个美国人
p = Person()
p1 = Person() p.country='USA'
#Person.country = 'USA'
print("p.........:",p.country)
print('p1.......',p1.country)
print('Person.......',Person.country)
#结论:p.country='USA'和Person.country = 'USA'两种赋值方式有区别:
#1、通过Person.country = 'USA'这种方式给【country】类变量赋值,则:Person.country、p.country、p1.country 三个的值都是USA,
#说明影响的是类的所有实例以及类本身
#2、通过p.country='USA'这种方式给【country】类变量赋值,则:p.country的值是USA,而Person.country和p1.country的值是空,
#说明影响的是当前实例,并不会影响其他实例和类本身
print("========通过实例调用四种不同类型的方法=========")
 print(p.walk_property)          #通过实例调用属性方法:正确
print(p.eat_class()) #通过实例调用类方法:正确
print(p.sleep_static()) #通过实例调用静态方法:正确
print(p.run()) #通过实例调用实例方法:正确
print(p._shopping()) #通过实例调用一个下划线开头的实例方法:正确
print(p._flower) #通过实例调用一个下划线开头的成员变量:正确 print(p.tool()) #通过tool()方法间接调用私有方法和私有变量
print("========通过类调用四种不同类型的方法========")
 print(Person.walk_property)     #通过类调用属性方法:错误
print(Person.eat_class()) #通过类调用类方法:正确
print(Person.sleep_static()) #通过类调用静态方法:正确
#print(Person.run()) #通过类调用实例方法:错误
print("=======类的继承==========")
 #支持多继承,比如class Japanese(Person,XXX,XX)
class Japanese(Person):
def play(self):
print("我是一个子类") #重写父类方法
def run(self):
# 调用父类方法
Person().run() #如果继承多个父类,super会根据继承的父类顺序,从左至右依次去找每一个父类,如果在某个父类中找到该方法,则停止寻找,
#直接实例化一个第一次找到的那个父类的对象,然后再调用父类的方法
super(Japanese, self).run()
print("重写父类方法") j1 = Japanese(nose='flat',skin='yellow',eye='black')
j2 = Japanese()
Japanese.country='Japan'
print('Japanese.......',Japanese.country)
print('j1........',j1.country)
print('j2........',j2.country)
# if __name__ == '__main__':
# 1、判断python文件是在别的地方导入的,还是直接运行的这个python文件
# 2、这句话一般是做调试的时候用的。
# 3、如果是直接运行这个python文件的时候,这句话一点用都没有

Python【面向对象编程】的更多相关文章

  1. python 面向对象编程学习

    1. 问题:将所有代码放入一个py文件:无法维护 方案:如果将代码才分放到多个py文件,好处: 1. 同一个名字的变量互相不影响 2.易于维护 3.引用模块: import module 2.包:解决 ...

  2. python 面向对象编程(一)

    一.如何定义一个类 在进行python面向对象编程之前,先来了解几个术语:类,类对象,实例对象,属性,函数和方法. 类是对现实世界中一些事物的封装,定义一个类可以采用下面的方式来定义: class c ...

  3. Python面向对象编程指南

    Python面向对象编程指南(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1SbD4gum4yGcUruH9icTPCQ 提取码:fzk5 复制这段内容后打开百度网 ...

  4. python面向对象编程进阶

    python面向对象编程进阶 一.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 1 ...

  5. Python面向对象编程(下)

    本文主要通过几个实例介绍Python面向对象编程中的封装.继承.多态三大特性. 封装性 我们还是继续来看下上文中的例子,使用Student类创建一个对象,并修改对象的属性.代码如下: #-*- cod ...

  6. Python 面向对象编程——访问限制

    <无访问限制的对象> 在Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑.但是,从前面Student类的定义来看(见:Py ...

  7. Python 面向对象编程 继承 和多态

    Python 面向对象编程 继承 和多态 一:多继承性 对于java我们熟悉的是一个类只能继承一个父类:但是对于C++ 一个子类可以有多个父亲,同样对于 Python一个类也可以有多个父亲 格式: c ...

  8. Python 面向对象编程基础

    Python 面向对象编程基础 虽然Pthon是解释性语言,但是Pthon可以进行面向对象开发,小到 脚本程序,大到3D游戏,Python都可以做到. 一类: 语法: class 类名: 类属性,方法 ...

  9. python面向对象编程学习

    python面向对象编程 基本概念理解 面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作 ...

  10. Python面向对象编程——继承与派生

    Python面向对象编程--继承与派生 一.初始继承 1.什么是继承 继承指的是类与类之间的关系,是一种什么"是"什么的关系,继承的功能之一就是用来解决代码重用问题. 继承是一种创 ...

随机推荐

  1. oracle varchar2改成大字段类型clob,读取大字段内容

    http://blog.csdn.net/cai7095576/article/details/23999549

  2. map的运用

    一.map是一种关联容器,支持高效的查找和访问 map中的元素是一些关键字-值(key-value)对: 关键字起索引作用: 值表示与索引相关联的数据. 关联容器中元素是根据关键字存储的,故其不支持位 ...

  3. sprint2 (第八天)

    今天课多,没做什么功能.这个sprint定的目标比较高,要实现的功能较多,可能完成不了目标值.因为GitHub下载和上传很慢,经常失败,所以这几天都没有更新GitHub,功能明天早点实现然后上传到Gi ...

  4. 2-Third Scrum Meeting-20151203

    任务安排 闫昊: 今日完成:请假.(编译+计组,压力有点大) 明日任务:设计本地数据库. 唐彬: 今日完成:请假.(编译+计组,压力有点大) 明日任务:阅读ios客户端代码. 史烨轩: 今日完成:请假 ...

  5. Daily Scrumming* 2015.10.24(Day 5)

    一.总体情况总结 从今天开始,我们开始正式进入紧锣密鼓的集中开发周啦~~加油Fighting~ 开会讨论了一下各个人的细致分工,前端后端各自想成员分派任务. 继续各自领域的准备工作,同时开始进行开发. ...

  6. 2018-2019-20172321 《Java软件结构与数据结构》第九周学习总结

    2018-2019-20172321 <Java软件结构与数据结构>第九周学习总结 教材学习内容总结 第15章 图 无向图 图由顶点和边组成. 顶点由名字或标号来表示,如:A.B.C.D: ...

  7. Java文件写入时是否覆盖

    这个是和服务器读数据结合着来的,是向服务器文件写数据,这就碰到了是否覆盖以前写的数据的问题,看FileWriter();的参数后面的参数名叫append,用词典查是附加的意思,灵机一动,改成false ...

  8. 团队作业4——第一次项目冲刺(Alpha版本)2017.11.18

    1.当天站立式会议照片 本次会议在5号公寓312召开,本次会议内容:①:熟悉每个人想做的模块.②:根据老师的要求将项目划分成一系列小任务.③:在上次会议内容完成的基础上增加新的任务. 2.每个人的工作 ...

  9. NBA篮球足球在线直播插件下载

    PPlive:点此下载PPLive播放器 Sopcast:点此下载Sopcast播放器 UUSee:点此下载UUSee播放器 CCTVReg:点此下载CCTV插件 PPStream:点此下载PPstr ...

  10. C# 正则提取字符串(提取一个或多个)

    实例一:string result = ""; string str = "大家好! <User EntryTime='2010-10-7' Email='zhan ...