版权声明
- 本文原创作者:谷哥的小弟
- 作者博客地址:http://blog.csdn.net/lfdfhl
面向对象概述
面向对象编程中有两个非常重要的概念:类和对象。
类是一个抽象的概念,它是对一类具有相同特征或者行为的事物的统称;其中,特征被称为属性,行为被称为方法。
对象是一个具体的事务,它是由类创建出来的具体事务。由哪一个类创建出来的对象,就拥有在该类中定义的属性和方法。
这么说起来,可能大家还是有些疑惑的。没关系,我们来看个例子,我们来瞅瞅工厂是怎么造车的。
- 1、设计图纸
在图纸上画好汽车各零件的尺寸 - 2、依据图纸造车
在生成车间按照图纸造车
这个图纸就相当于是一个类,造出来的车就是一个个对象。车的颜色、长宽高就是类的属性;启动,前进,后退,停车就是类的方法。而且,依据同一张图纸可以造车多辆车;类似地,依据同一个类可以生成多个对象。
面向对象基础语法
在此,简要介绍面向对象最基础的语法。
定义类
class 类名:
- 1、使用关键字class定义类
- 2、类名首字母大写
- 3、在类中定义属性和方法
创建对象
对象名 = 类名()
示例
"""
原创作者:谷哥的小弟
博客地址:http://blog.csdn.net/lfdfhl
示例描述:面向对象基础
"""
# 定义类
class Dog:
# 定义方法
def eat(self):
print("小狗吃骨头")
# 定义方法
def sleep(self):
print("小狗睡觉")
# 创建对象
dog1 = Dog()
objectType = type(dog1)
print("对象的类型%s" % objectType)
address = id(dog1)
print("对象的内存地址%x" % address)
# 调用方法
dog1.eat()
dog1.sleep()
# 创建对象
dog2 = Dog()
objectType = type(dog2)
print("对象的类型%s" % objectType)
address = id(dog2)
print("对象的内存地址%x" % address)
# 调用方法
dog2.eat()
dog2.sleep()
在该示例中,我们定了类和类中的函数;然后,创建对象并通过对象调用方法。
self
在Python中self代表调用该函数的对象。也就是说:哪个对象调用了该方法,那么self就代表该对象。
示例
"""
原创作者:谷哥的小弟
博客地址:http://blog.csdn.net/lfdfhl
示例描述:面向对象基础
"""
# 定义类
class Dog:
# 定义方法
def eat(self):
objType = type(self)
print("对象的类型%s" % objType)
add = id(self)
print("对象的内存地址%x" % add)
print("小狗%s吃骨头" % self.name)
# 定义方法
def sleep(self):
objType = type(self)
print("对象的类型%s" % objType)
add = id(self)
print("对象的内存地址%x" % add)
print("小狗%s睡觉" % self.name)
# 创建对象
dog1 = Dog()
objectType = type(dog1)
print("对象的类型%s" % objectType)
address = id(dog1)
print("对象的内存地址%x" % address)
# 为对象添加属性(不推荐)
dog1.name = "tom"
# 调用方法
dog1.eat()
dog1.sleep()
print("-"*30)
# 创建对象
dog2 = Dog()
objectType = type(dog2)
print("对象的类型%s" % objectType)
address = id(dog2)
print("对象的内存地址%x" % address)
# 为对象添加属性(不推荐)
dog2.name = "jack"
# 调用方法
dog2.eat()
dog2.sleep()
在该示例中通过对象名.属性名=属性值
的方式为对象设置属性并且在类中的方法里通过self.属性名
的方式获取属性值。但是,不推荐使用对象名.属性名=属性值
的方式为对象设置属性;因为,属性应该封装在类的内部。
Python对象内置函数
在此,介绍与对象相关的内置函数。
方法名 | 作用 |
---|---|
_ _ new _ _ | 创建对象时,该方法会被自动调用;该方法较少使用 |
_ _ init _ _ | 对象被初始化时,该方法会被自动调用;该方法较常使用 |
_ _del _ _ | 对象被从内存中销毁时,该方法会被自动调用;该方法较少使用 |
_ _ str _ _ | 返回对象的描述信息;该方法较常使用 |
示例1
"""
原创作者:谷哥的小弟
博客地址:http://blog.csdn.net/lfdfhl
示例描述:面向对象基础
"""
class Dog:
def __new__(cls, *args, **kwargs):
print("调用__new__()")
cls.instance = super().__new__(cls)
return cls.instance
def __init__(self):
print("调用__init__()")
def __str__(self):
print("调用__str__()")
return "__str__()方法的返回值"
def __del__(self):
print("调用__del__()")
# 定义方法
def eat(self):
print("小狗吃骨头")
# 定义方法
def sleep(self):
print("小狗睡觉")
# 创建对象
dog = Dog()
# 调用方法
dog.eat()
dog.sleep()
# 打印对象
print(dog)
从这个例子,我们看到:
- 1、_ _ new _ _方法最先自动执行,该方法返回一个对象
- 2、_ _ new _ 方法之后自动执行 _ init _ _方法
- 3、在程序执行完毕时自动调用_ _ del _ _方法,从内存中销毁该对象
- 4、重写_ _ str_ 方法后print( )函数打印对象时打印的是 _ str_ _方法的返回值
示例2
"""
原创作者:谷哥的小弟
博客地址:http://blog.csdn.net/lfdfhl
示例描述:面向对象基础
"""
# 定义类
class Dog:
# 重写__init__方法
def __init__(self, name):
# 为类的属性name赋值
self.name = name
# 定义方法
def eat(self):
print("小狗%s吃骨头" % self.name)
# 定义方法
def sleep(self):
print("小狗%s睡觉" % self.name)
# 创建对象并设置对象的属性
dog = Dog("tom")
# 获取对象的属性
name = dog.name
# 打印对象的属性
print("小狗的名字是%s" % name)
# 调用对象的方法
dog.eat()
dog.sleep()
从这个例子,我们看到:
- 1、在类中重写了_ _ init _ _方法。在该方法中增加了参数name,代表类的属性;所以,该类的每个对象都有一个name属性。
- 2、在创建对象时可传入该对象name的值,即为该对象属性赋值
- 3、可通过对象名.属性名获取该对象的属性值