类
什么是对象?之前我们求一个字符串的长度,通过for循环或者while循环求解,随着课程的深入,我们可以通过调用函数来实现,用具体代码来实现如下:
1 # 使用for循环 2 s1 = 'cfhgjrfekdcmfvjrgte' 3 count = 0 4 for i in s1: 5 count += 1 6 print(count)
1 # 使用函数实现: 2 def mylen(argv): 3 count = 0 4 for i in argv: 5 count += 1 6 return count 7 s1 = 'cfhgjrfekdcmfvjrgte' 8 9 print(mylen(s1))
接下来我们看一个例子:
1 class A: 2 name = 'colin' 3 def func1(self): 4 pass
这种含有class定义的我们称为类。从结构上理解,上面可分为两部分:
1 如:name = 'colin' 这部分称为:静态属性,静态变量,也可以称为静态方法
2 如:def 定义的函数,我们称为动态属性,也可以称为方法。
那函数与面向对象有什么不同呢?先举下面两个例子:
购物车系统,为了实现注册,登陆与购物不同功能时,使用函数:
def register(argv): pass def login(argv): pass def shoppingcar(argv): pass
使用面向对象,将各个函数功能放进一个类中:
class Shopping_Car: def __init__(self): # 特殊方法 pass def register(self): pass def login(self): pass def shoppingcar(self): pass
通过上面的对比可以看出:
1 函数封装的是一个功能,而面向对象封装的是多个相关的功能
2 面向对象抽象,它是一种思想
3.面向对象的程序可扩展,对象都是一个个独立的。它具有耦合性和差异性
我们定义了一个类,如何去查看类中的所有属性以及方法?
1 这里就提供一个方法__dict__
class Person: animal = '高级动物' walk_style = '直立行走' language = '语言' def eat(self): print('该吃吃,该喝喝,啥事别忘心里搁') def work(self): print('人类都需要工作。。。') print(Person.__dict__) print(Person.__dict__['name']) # 报错 通过__dict__方式 单独的属性及方法可以查,但是不能增删改 Person.__dict__['animal'] = '低级动物' # 报错 TypeError: 'mappingproxy' object does not support item assignment Person.__dict__['name'] = 'alex' # 报错,不能增加
所以,从上面的例子可以看出,一般用__dict__查看类中的所有属性及方法,不能进行其他操作。
2 第二种查看方法,使用'.',该点的使用,在某些情况下可以实现类的增删改。
print(Person.animal) # 查 高级动物 Person.name = 'colin' # 增 colin print(Person.name) Person.animal = '低级动物' # 改 低级动物 print(Person.animal) del Person.walk_style # 删 print(Person.__dict__)
3 操作方法:一般不通过类名操作,因此,需引入对象。
对象
什么是对象?先引入下面的例子:
class Person: animal = '高级动物' walk_way = '直立行走' language = '语言' def __init__(self,name,age,eye): # 功能:给对象封装属性的。 self.name = name self.age = age self.eye = eye def eat(self): # print(self) print('该吃吃,该喝喝,啥事别忘心里搁') def work(self): print('人类都需要工作。。。') obj = Person('colin',27,'小眼睛') # 这个过程是一个实例化过程,他会实例化一个对象(他会在内存实例化一个对象空间)。 print(obj) print(obj.name)
实例化过程内部进行了三个阶段:
1,在内存中开辟了一个对象空间
2,自动执行类中的__init__方法,并且将对象空间自动传给self参数,其他参数手动传入。
3, 执行__init__方法 给对象空间封装相应的属性。
对象操作是指对对象空间操作,同与类操作相同,由增删改查操作。
对象查看对象空间所有的属性使用:__dict__
print(obj.__dict__)
对象操作对象空间的某个属性,通过'.'来实现增改查功能。
obj.sex = '男' # 增 del obj.eye1 # 删 obj.eye = '大一点' # 改 print(obj.name1) print(obj.__dict__)
对象操作类空间的属性 只能查。
print(obj.animal) obj.animal = '低级动物' print(obj.animal) print(obj.__dict__) print(Person.__dict__)
对象操作类空间的方法
obj.eat()