ITPub博客

首页 > > > Python面向对象(一)

Python面向对象(一)

作者:Jack2k 时间:2021-01-12 09:20:57 0 删除 编辑

什么是对象?

  • 对象:独立性、功能性、交互性
  • 万物皆对象,均继承于Object类
  • OOP:面向对象编程,本质含义在于复用代码,在较大规模或复杂项目中有用,提高写作产量
  • 面向对象和面向过程的对比
  • 编程实例

面向过程的程序解决方法:

面向对象:

  • 面向对象的3个特征:封装、继承、多态
  • 封装:属性和方法的抽象
  • 继承:高级复用,几乎完全使用原有类属性与方法
  • 多态:针对方法和方法灵活性的抽象;同一个名字的方法可以处理多种数据类型、多个不同参数

面向对象术语

  • 类Class 对象 Object

类是一种抽象,一般不使用类进行运算,通过类来生成对象进行运算。对象在面向对象编程中,相当于程序的变量。实例化就是从类到对象的过程。对象是根据模板【类】生成的实际的功能。

属性:存储数据的变量

方法:操作数据的函数

对象:类对象、实例对象

  • 类对象、实例对象
  • 其他术语

面向对象的练习实例

  • 如何用Class对象解决该问题?
class Product():  #定义类,保存名字和价格等信息
    def __init__(self,name):
        self.name = name
        self.label_price =   # 初始值为0
        self.real_price = 

c = Product("电脑")
d = Product("打印机")
e = Product("投影仪")

c.label_price,c.real_price = 10000,8000
d.label_price,d.real_price = 2000,1000
e.label_price,e.real_price = 1500,900

s1,s2 = ,

for i in [c,d,e]:
    s1+=i.label_price
    s2+=i.real_price

print(s1,s2)
  • OOP更易于理解

类的构建

  • 类,class。

类定义不限位置,可以包含在分支或其他丛书语句块中,执行时存在即可

其中,大写单词组合指首字母大写的组合。<类名>.__doc__访问类描述,doc前面为两个下划线。

访问类描述
  • 类对象:默认在类定义完成后,默认生成类对象
  • 实例对象:类最常用的使用方式
  • 类的构造函数:

1) 用于从类创建实例对象的过程

2)为实例对象提供了参数输入过程

3) 为实例对象的属性定义和赋值提供支持

  • 属性和方法是类对外交互的方式,是接口
  • 类对象全局只有一个,实例对象可生成多个

  • 使用python解释器预定义的__init__()作为构造函数,可以为python对象提供参数。可以接收参数并完成初始操作。其中,self只在类内部使用。

  • 类属性:类对象的属性,所有实例对象所共享
  • 实例属性:实例对象的属性,由各实例对象所独享
  • 访问类属性,不管在类内还是类外,使用<类的名字>.<属性名>访问;访问实例属性,在类内部,使用self.<属性名>访问;在类外部,用<对象名>.<属性名>访问

类的方法

  • 方法是类内部定义的函数
  • 实例方法:最常用,形式如下,使用<对象名>.<方法名>访问实例方法。实例方法中,第一个参数必须是self


  • demo1:计算某人的幸运数字

访问实例属性,在类内部,使用self.<属性名>访问;在类外部,用<对象名>.<属性名>访问。实例方法在类外部访问,采用<对象名>.<方法名>。

'''
用来计算某人的幸运数字
'''
class DemoLucky:
    def __init__(self,name):
        self.name = name
    def Lucky(self):
        s = 
        for c in self.name:
            s+=ord(c)%100
        return s
dc1 = DemoLucky("金榜")
dc2 = DemoLucky("岳阳")

print(dc1.Lucky())
print(dc2.Lucky())
  • 类方法:与类对象相关的函数,由所有实例对象共享

采用<类名>.<方法名>(<参数列表>)或者<对象名>.<方法名>(<参数列表>)方式访问

至少包含一个参数,表示类对象本身,建议用cls

必须包含@classmethod作为装饰器

只能操作类属性和其他类方法,不能操作实例属性和实例方法

  • demo2
'''
classmethod使用
'''
class demoClass:
    count = 
    def __init__(self,name):
        self.name = name
        demoClass.count+=1
    @classmethod
    def getChrCount(cls):
        s = "我爱我的祖国,我爱我的家乡"
        return s[demoClass.count]

dc1 = demoClass("岳阳")
dc2 = demoClass("金榜")
print(demoClass.getChrCount())
print(dc1.getChrCount())
  • 自由方法:定义在类命名空间中的普通函数,采用<类名>.<方法>(<参数列表>)方式访问,类名代表着对应的命名空间。

自由方法可以没有参数

只能操作类属性和类方法,不能操作实例属性和实例方法

只能使用<类名>访问

  • demo3:
'''
自由方法的学习
'''
class demoStatic:
    count = 
    def __init__(self,name):
        self.name = name
        demoStatic.count+=1
    def foo():
        demoStatic.count *= 100
        return demoStatic.count

dc1 = demoStatic("岳阳")
dc2 = demoStatic("金榜")
# print(dc1.foo())
print(demoStatic.foo())
# print(dc2.foo())

# 注意:自由方法只能通过类名访问
  • 静态方法:能够被所有实例对象共享的类中普通函数,仅需要增加装饰器@staticmethod【属于自由方法】

可以用<类名/对象名>.<方法>(<参数列表>)

仍然只能操作类属性和其他类方法,不能操作实例属性和实例方法【同样没有引入self参数】

  • demo4:
'''
静态方法的学习
'''
class demoStatic:
    count = 
    def __init__(self,name):
        self.name = name
        demoStatic.count+=1
    @staticmethod
    def foo():
        demoStatic.count *= 100
        return demoStatic.count

dc1 = demoStatic("岳阳")
dc2 = demoStatic("金榜")
print(dc1.foo())
print(demoStatic.foo())
print(dc2.foo())

# 结果为
200
20000
2000000
  • 保留方法:由双下划线开始、结束的方法,保留使用
# 其中,__len__()方法对应len()函数操作可理解为:
# 这是python解释器的保留方法,已对应好了,只需要编写代码即可
# 执行len(对象)代码时,解释器会去找对应类中有没有__len__()函数的重载,如果有,就可以返回正确的值

'''
保留方法的学习
'''
class DemoSave:
    def __init__(self,name):
        self.name = name
    def __len__(self):
        return len(self.name)

dc1 = DemoSave("yueyang")
dc2 = DemoSave("方金榜")
print(len(dc1))
print(len(dc2))




来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/36/viewspace-3156472/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2007-12-08

  • 博文量
    214
  • 访问量
    17841