——王宇阳 总结 (Code_boy)2018年11月16日

 class Person:
name='xxx'
age=20 p=Person() #p为实例对象
print(p.name,p.age)
p.name="yyy"
p.gender='male'
print(p.name,p.gender,p.age)
print(Person.name,Person.age)

#p(实例对象)对值得修改不影响Person类中的内容
Person.age='30'
print(Person.age)
#class Person (类) 对值得修改将该影响Person类中的内容
'''

#访问权限(类的属性)
'''
class Person:   #Person中的name和age公有的
    name = 'james'
    age=20
#在python中规定在前面加两个下划线,就变为私有的
'''
'''
class Person:
    __name = 'james'        #私有的__name
    age = 20

def show(self):     #self >> 自己
        print(self.__name,self.age)     #自己访问自己 正常返回

p=Person ()
p.show()      #需要调用除show()函数,否则会拒绝class中的show的执行
print(Person.__name)            # 访问类中的私有属性 异常返回
print(p.age)
#出现私有的函数调用时,结果同样如此!私有的函数,元素只能在class中被使用
#常用的方法就是通过调用公有的函数来执行函数内的私有属性的调用
'''

#案例:编写个人信息并建立对象访问属性

 class Person:
name = 'xxx'
gender = 'x'
age = 0 p=Person()
print(p.name,p.gender,p.age)
print(Person.name,Person.gender,Person.age) p.name = 'A'
p.gender = 'Male'
p.age = 20 Person.name = 'B'
Person.gender = 'Female'
Person.age = 21 print(p.name,p.gender,p.age) #p实例对象属性
print(Person.name,Person.gender,Person.age) #Person类属性

#实例方法
'''

 class Person:
age = 20
def show(self):
print (self.age) p.Person()

#实例方法至少有一个参数,一般以名为(self)的变量作为该参数(名称可自定义)
#实例方法通过实例对象调用,例如:p.show()
#如果使用类名称调用,需要人为传递实例参数,例如:Person.show(p)
#实例方法被调用是要向他的第一个参数传递实例对象

 class Person:
name = 'james'
age = 12 def getName(self):
return self.name def getAge(self):
return self.age p=Person()
print(p.getName(),p.getAge()) #实例属性对象调用
print(Person.getAge(p)) #类名称调用
  def show(self,s):   #参数传递
print(self,s) p.show('hi') #'hi'值传递给s
Person.show(p,'hello') #hello 给 s'''

#类方法

 class Person:
age = 20
@classmethod
def show(cls):
print(cls.age) p=Person()

#类方法要使用 @classmethod 来修饰,而且第一个参数一般命名为cls(可另定名)
#类方法通常使用类的名称调用,例如:Person.show()
#类方法也可实例方法调用,例如:p.show()
#类方法调用时会向它的第一个参数传递类的名称

 class Person:
__name = 'james'
__age = 12 @classmethod
def show(self):
print(self)
print(self.__name,self.__age) Person.show()
p=Person()
p.show()'''

#静态方法
'''
定义:

 class Person:
age = 20
@staticmethod
def show():
print(Person.age) p = Person()

#静态变量函数通过@staticmethod修饰
#通常采用类的名称或者实例来调用静态方法,例如:Person.show(),p.show()
#在调用静态函数时不会向函数传递任何参数

 class Person:
__name = 'james'
__age = 12 @staticmethod
def show(): #静态不带参数
print(Person.__name) p = Person()
Person.show()
p.show()

#类、实例、静态方法 不同——Person

 class Person:
name = 'xxx'
gender = 'x'
age = 0
#实例方法
def instanceShow(self):
print(self.name,self.gender,self.age) @classmethod #类方法
def classShow(cls):
print(cls.name,cls.gender,cls.age) @staticmethod #静态方法
def staticShow():
print(Person.name,Person.gender,Person.age) p=Person()
p.instanceShow() #实例方法调用
Person.classShow() #类方法调用
Person.staticShow() #静态方法调用

实例方法一般用实例对象调用
类方法和静态方法一般用类名称调用

#对象初始化
'''
构造方法(函数)...>完成函数初始化
@ 构造方法__init__(self, ... )在生成对象时调用,
可以用来进行一些初始化操作,不需要显示去调用,系统默认执行
如果用户自己没有定义构造方法,系统就自己执行默认的额构造方法
__init__(self)在生成对象时调用
__del__(self)在释放对象时调用

 class Person:
def __init__(self,n,a):
self.name=n
aelf.age=a p=Person('xxx',20)
print(p.name,p.age)

@ 析构方法__del__(self)在释放对象时调用,可以在里面进行一些释放资源的操作
不需要显示调用

 class Person:
def __init__(self,n,a):
self.name = n
self.age = a
def __del__(self):
print('__del__',self.name,self.age) p=Person('xxx',20)
print(p.name,p.age) class Person:
def __init__(self):
print("__init__",self)
def __del__(self):
print("__del__",self) p=Person()

#__init__完成对象初始化

 class Person:
def __init__(self,n,g,a): #n,g,a 传参单位
self.name = n
self.gender = g
self.age = a def show(self):
print(self.name,self.gender,self.age) p=Person('james','male',20) #p对象确定后,p对象的初始化(n,a,m)就完成了
p.show()

#python规定:类中只能有一个构造函数
#...__init__中设置默认参数

 class Person:
def __init__(self,n='',g='male',a=0):
self.name = n
self.gender = g
self.age = a def show(self):
print(self.name,self.gender,self.age) a = Person('james')
b = Person('james','fenmale')
c = Person('james','male',20)
a.show() #结果:james male 0
b.show() #结果:james fenmale 0
c.show() #结果:james male 20
# __init__参数中如果设置了默认值,得到新的内容传参后则覆盖原值'''

#案例:日期类 MyDate

 class MyDate:
__months = [0,31,28,31,30,31,30,31,31,30,31,30,31]
def __init__(self,y,m,d):
if (y<0):
print("Error:无效年份")
if (m<1 or m>12):
print("Error:无效月份")
if (y%400 == 0 or y%4 == 0 and y%100!=0):
MyDate.__months[2] = 29
else:
MyDate.__months[2] = 28 if d<1 or d>MyDate.__months[m]:
print("Error:无效日期")
#日期,月份,年份均合法后,创建类的属性(内容)
self.year = y
self.months = m
self.day = d
def show(self,end='\n'):
print("%d-%d-%d"%(self.year,self.months,self.day),end = end) p = MyDate(2018,11,19)
p.show()

#类的继承
#派生与继承:Student:name gender age

 class Person:
def __init__(self,name,gender,age):
self.name = name
self.gender = gender
self.age = age def show(self,end='\n'):
print(self.name,self.gender,self.age) class Student(Person):
def __init__(self,name,gender,age,major,dept):
Person.__init__(self,name,gender,age)
self.major = major
self.dept = dept def show(self):
Person.show(self,'')
print(self.major,self.dept) s = Student('james','male',20,'softwart','computer')
s.show() '''
结果:
james male 20
softwart computer
'''

#继承类构造函数:

从上面的Strdent类的定义可以看除派生类的构造函数除了要完成自己的新增加的
major,dept属性的初始化外,还要调用基类的Person的构造函数,而且还要显示调用
    即: Person.__init__(self,neme,gender,age)
通过类名称Person直接调用Person的__init__函数,并提供所要的4个函数
继承类时不会自动调用基类的构造函数的,必须显示调用

#属性方法的继承:
如果一个基类中有一个实例方法,在继承类中也可以重新定义完全一样的实例方法。
例如 Person有show方法,在Student中也有一样的show方法,它们是不会混淆的
我们称Student类的show重写了Person的show
—当然,一个基类的实例方法也可以不被重写,派生类会继承这个基类的实例方法
-派生类也可以增加自己的新实例方法

 class Person:
className = 'Person' #自己的实例属性
def __init__(self,name,gender,age):
self.name = name
self.gender = gender
self.age = age def show(self,end='\n'):
print(self.name,self.gender,self.age) @classmethod #类方法修饰
def classClassName(cls):
print(cls.className) @staticmethod #静态方法修饰
def staticClassName():
print(Person.className) def display(self):
print('display') class Student(Person):
#className = 'Student'
def __init__(self,name,gender,age,major,dept):
Person.__init__(self,name,gender,age)
self.major = major
self.dept = dept def show(self):
Person.show(self,'')
print(self.major,self.dept) s = Student('A','male',20,'software','computer')
s.show()
print(Student.className) #Student本身没有,则显示上一级(Person)
Student.classClassName()
Student.staticClassName() s.display() #实例调用 #结果说明:Student继承了Person的实例、静态、类(属性)方法
#结果:
'''
A male 20
software computer
Person
Person
Person
display
'''

#案例 :年月日 + 时分秒

 class MyDate:
__months = [0,31,28,31,30,31,30,31,31,30,31,30,31]
def __init__(self,y,m,d):
if (y<0):
print("Error:无效年份")
if (m<1 or m>12):
print("Error:无效月份")
if (y%400 == 0 or y%4 == 0 and y%100!=0):
MyDate.__months[2] = 29
else:
MyDate.__months[2] = 28 if d<1 or d>MyDate.__months[m]:
print("Error:无效日期")
#日期,月份,年份均合法后,创建类的属性(内容)
self.year = y
self.months = m
self.day = d
def show(self,end='\n'):
print("%d-%d-%d"%(self.year,self.months,self.day),end = end) class MyDateTime(MyDate):
def __init__(self,y,mo,d,h,mi,s):
MyDate.__init__(self,y,mo,d)
if (h<0 or h>23 or mi<0 or mi>59 or s<0 or s>59):
print("Error:无效时间")
self.hour = h
self.minute = mi
self.second = s def show(self):
MyDate.show(self,'\t')
print("%d:%d:%d"%(self.hour,self.minute,self.second)) p = MyDateTime(2018,11,19,21,21,54)
p.show() #结果: 2018-11-19 21:21:54

python面向对象实例的更多相关文章

  1. python 面向对象初级篇

    Python 面向对象(初级篇) 概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发" ...

  2. Python 面向对象 基础

    编程范式概述:面向过程 和 面向对象 以及函数式编程 面向过程:(Procedure Oriented)是一种以事件为中心的编程思想. 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现 ...

  3. python面向对象进阶(八)

    上一篇<Python 面向对象初级(七)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...

  4. python 面向对象(进阶篇)

    上一篇<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...

  5. python 面向对象编程学习

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

  6. python 面向对象和类成员和异常处理

    python 面向对象 你把自己想象成一个上帝,你要创造一个星球,首先你要把它揉成一个个球,两个直径就能创造一个球 class star: '''名字(name),赤道直径(equatorial di ...

  7. python 面向对象学习

    ------Python面向对象初 下面写一个类的简单实用,以便方便理解类 #python 3.5环境,解释器在linux需要改变 #阅读手册查询readme文件 #作者:S12-陈金彭 class ...

  8. 初识python面向对象

    一.初识python面向对象: class Person: #使用class关键字定义一个类 age=0 #类变量(静态变量) def eat(self,food): #定义一个方法 self.age ...

  9. python 面向对象、特殊方法与多范式、对象的属性及与其他语言的差异

    1.python 面向对象 文章内容摘自:http://www.cnblogs.com/vamei/archive/2012/06/02/2532018.html   1.__init__() 创建对 ...

随机推荐

  1. GCD 学习(二)dispatch_queue_create创建Dispatch Queue

    摘录于: http://zhuyanfeng.com/archives/3042 dispatch_queue_create 用于创建用户线程队列.可以创建Serial/Concurrent Disp ...

  2. Entity Framework Tutorial Basics(33):Spatial Data type support in Entity Framework 5.0

    Spatial Data type support in Entity Framework 5.0 MS SQL Server 2008 introduced two spatial data typ ...

  3. 数据结构 station

    问题描述 一天,小 L 突然对列车的进出站问题产生了兴趣,如下图所示:列车只能从 A 进站,或从 B 出站.列车从 A 进站,进站顺序为 1, 2, 3, 4, 5列车从 B 出站,出站顺序为 5, ...

  4. Python--socket和threading编程

    网络编程基础(一) TCP/IP协议 OSI/RM协议 特点:独立于计算机硬件和操作系统,统一分配网络地址,提供可靠服务,隔离了物理网络的硬件差异 协议分层(百度):网络接口层:IEE802.3(以太 ...

  5. oracle安装和使用问题解决方案

    1.Enter the full pathname for java.exe 要输入的是32位系统的jdk中的java.exe路径,比如  C:\Program Files\Java\jdk1.6.0 ...

  6. Kotlin 数据类型(字符类型)

    Kotlin有两种常见的字符类型. 第一种是String,第二种char. String String 的类型的赋值必须是用双引号的. 格式: var name="Arm830" ...

  7. UWP&WP8.1 基础控件—Button

    Button作为最常用的控件,没有特别难的用法,是一个非常简单,可以很快就掌握的控件. Button 基础用法: 同样,在UWP项目中,可以从工具箱中拖拽到面板中进行使用.也可以使用XAML语法进行编 ...

  8. 3分钟实现iOS语言本地化/国际化(图文详解)

    前言 语言本地化,又叫做语言国际化. 是指根据用户操作系统的语言设置,自动将应用程序的语言设置为和用户操作系统语言一致的语言. 往往一些应用程序需要提供给多个国家的人群使用,或者一个国家有多种语言,这 ...

  9. 查看ip常见命令...

    1.获取ip Unix用户可以在命令提示符中输入ifconfig来获取. 使用Windows的用户,请尝试使用 ipconfig 命令.

  10. luogu4430 小猴打架

    假硕讲了个prufer编码和Caylay公式 我为了证明prufer编码没用 所以用矩阵树定理证明了Caylay公式 让我们用矩阵树定理推一波 首先这个小猴打架最后会打成一棵树,这棵树是N个点的完全图 ...