一、面向对象设计
(1)将一类事物的数据(数据属性)和方法(函数属性)整合在一起的程序设计方法。
(2)对象:由类生成的,将数据和方法整合在一起的、具体的数据结构。
(3)类:将同类对象,抽象出共同的数据和方法,然后将其封装在一起,形成的数据结构。
(4)面向对象编程:用面向对象编程独有的语法class,去实现面向设计
(5)实例化:由类产生对象的过程。
(6)对象也叫实例
二、类和对象的基础知识
1、类的创建和实例化
一般类名首字母要大写,采用驼峰命名法。
例:
class Chinese:
'这是一个中国人的类'
pass
#实例化
p1 = Chinese()
# 注:类定义中的代码在类被定义时会被执行,而不是在类实例化时才执行。
a=10
class Chinese:
print(a) # 10
2、类的属性调用
类的属性又叫静态属性
class Chinese:
'这是一个中国人的类'
name = 'xixi'
def eat():
print("吃饭!")
#数据属性调用
print(Chinese.name) # xixi
#函数属性调用
Chinese.eat() # 吃饭!
3、关键字class的作用
(1)在定义类的时候,不用写class 类名(参数),直接写class 类名 即可。在实例化的时候,实参可以直接传递给 __init__ 方法,并运行 __init__ 方法。且 __init__ 方法不用写return语句,自动return初始化字典。
(2)类不用写return语句,实例化时,自动return一个字典( __init__ 方法返回的初始化字典)。
(3)实例化时,自动向类的__init__方法的第一个参数传递实例本身,通常形参为self。
4、类(对象)的内置属性
(1)__dict__ 类(对象)的属性字典
类名.属性 本质上就是在查看属性字典。不要修改底层的属性字典。
class Chinese:
'这是一个中国人的类'
name = 'xixi'
def eat():
print("吃饭!")
print(dir(Chinese))
print(Chinese.__dict__['name']) #xixi
print(Chinese.name) #xixi
Chinese.__dict__['eat']() #吃饭!
Chinese.eat() #吃饭!
(2)__name__ 类名
print(Chinese.__name__) #Chinese
(3)__doc__ 文档字符串
print(Chinese.__doc__) #这是一个中国人的类
(4)__module__ 类(对象)所在模块名
print(Chinese.__module__) #__main__
(5)__class__ 实例对应的类
p1 = Chinese()
print(p1.__class__) #<class '__main__.Chinese'>
5、对象属性的调用
(1)调用语法同类的属性调用
(2)规则:先查找对象的属性字典,即__init__方法中定义的属性。对象的属性字典没有,再去查找类的属性字典。
(3)一般对象的属性字典中只定义数据属性,函数属性放在类的属性字典中。
(4)实例在调用类的方法时,会自动向方法的第一个参数传递实例本身。
class Chinese:
'这是一个中国人的类'
def __init__(self, name):
self.name = name
def eat(self):
print("%s吃饭!" % self.name)
p1 = Chinese('xixi')
p1.eat() # xixi吃饭!
(5)在类内部定义的属性为类的属性,在__init__方法中定义的属性,为对象的属性。在__init__方法中使用的变量与类属性同名(非对象调用属性),也不会取它的值。
c = 1
class Chinese:
'这是一个中国人的类'
def __init__(self, name):
print(c)
self.name = name
c = 2
def eat_food(self):
print("%s吃饭!" % self.name)
p1 = Chinese("xixi") # 1
print(p1.c) # 2
6、类的属性的增删改查
class Chinese:
'这是一个中国人的类'
def __init__(self, name):
self.name = name
gender = "male"
def eat_food(self):
print("%s吃饭!" % self.name)
# 查看
print(Chinese.gender) # male
# 修改
Chinese.gender = "f"
print(Chinese.gender) # f
# 添加
Chinese.age = 18
# 删除
del Chinese.age
7、实例属性的增删改查
class Chinese:
'这是一个中国人的类'
def __init__(self, name):
self.name = name
gender = "male"
def eat_food(self):
print("%s吃饭!" % self.name)
p1 = Chinese("xixi")
print(p1.__dict__) # {'name': 'xixi'}
# 查看
print(p1.name) # xixi
# 修改
p1.name = "haha"
print(p1.__dict__) # {'name': 'haha'}
# 添加
p1.age = 18
print(p1.__dict__) # {'name': 'haha', 'age': 18}
# 删除
del p1.age
print(p1.__dict__) # {'name': 'haha'}