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

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

面向对象:面向对象的3个特征:封装、继承、多态

封装:属性和方法的抽象继承:高级复用,几乎完全使用原有类属性与方法

多态:针对方法和方法灵活性的抽象;同一个名字的方法可以处理多种数据类型、多个不同参数

面向对象术语类Class 对象 Object

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

属性:存储数据的变量

方法:操作数据的函数

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

面向对象的练习实例如何用Class对象解决该问题?

class Product(): #定义类,保存名字和价格等信息
def __init__(self,name):
self.name = name
self.label_price = 0 # 初始值为0
self.real_price = 0
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 = 0,0
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 = 0
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 = 0
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 = 0
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 = 0
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))