1.对象
万物皆对象,包括人、猫、狗、汽车等,处理为属性和行为。对象具有属性也称为状态和变量,如每个人的名字、年龄、身高、体重等属性,每个对象的属性值不同。对象还具有行为,也称作方法,如每个人要吃饭、睡觉、打豆豆,每个对象的行为也不相同。
2.类
类是相同类似对象的统称,人就是一种类,每个人——即人这类对象。类是对象的抽象,对象则是类的实例化、具体化,每个对象都包括了类中定义的属性和行为。
3.面向对象
3.1面向对象的基本特征
面向对象的三大特性:封装性、继承性和多态性
类:用来描述具有相同的属性和方法的对象的集合。定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
类变量:在整个实例化的对象中是公用的。类变量定义在类中,且在函数体之外,常不作为实例变量使用。
数据成员:类变量或者实例变量。
方法重写:如果从父类继承的方法不能满足子类的需求,可以对其改写,此过程叫覆盖,也称为方法的重写。
实例变量:定义在方法中的变量,只作用于当前实例的类。
继承:指一个派生类和继承基类的字段和方法。
实例化:创建一个类的实例,一个类的具体对象。
方法:类中定义的函数。
对象:通过类定义的数据结构实例。包括两个数据成员(类变量和实例变量)和方法。
3.2定义语法
用class关键字来声明一个类
class 类名:
语法块
class EmptyClass:
pass
3.3类的使用
class EmptyClass:
pass
empty=EmptyClass()
print(type(empty))
运行结果:<class 'type'>
3.4类的构造方法
class Dog:
def _init_(self):
print("1")
dog=Dog()
1
3.5类的属性
构造方法时可初始化一些属性
class Dog:
def _init_(self,name):
self.name=name
self.age=3
dig=Dog("旺财")
print(dog.name)
print(dog.age)
旺财
3
3.6类中的方法
class Dog:
def __init__(self,name):
self.name=name
def play(self):
print("旺财",self.name)
dog=Dog("旺财")
dog.play()
旺财 旺财
3.7私有属性
def set_age(self, age):
if not isinstance(age, int):
print("输入的年龄必须是数字!")
return False
if age <= 0:
print("年龄必须大于0!")
return False
self.__age = age
def play(self):
print("我今年", self.__age)
dog=Dog("旺财")
dog.set_age("hello")
dog.set_age("-20")
dog.set_age(3)
dog.play()
旺财 生成成功
输入的年龄必须是数字!
输入的年龄必须是数字!
我今年 3
旺财 生成成功
3.8私有方法
class Dog():
def __say(self,name):
print(name)
def play(self):
self.__say("汪汪汪")
dog=Dog()
dog.play()
#错误
dog.__say
AttributeError: 'Dog' object has no attribute '__say'
4.继承和多态
继承:对一种类进行层级划分的概念。增加新的类,不仅可以继承新的属性和方法,还可以增加新的。
class Animal:
def __init__(self,name):
self.name=name
def play(self):
print("我是",self.name)
class Dog(Animal):
pass
dog=Dog("旺财")
dog.play()
我是 旺财
注意:子类不能继承父类的私有方法,也不能调用父类的私有方法。
多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。
判断一个实例是不是某个对象可以使用isinstance函数
class Animal:
def say(self):
print("Aniaml")
#继承
class Dog(Animal):
def say(self):
print("Dog")
#继承
class Cat(Animal):
def say(self):
print("Cat")
dog=Dog()
cat=Cat()
print(isinstance(dog,Dog))
print(isinstance(dog,Animal))
print(isinstance(cat,Cat))
print(isinstance(cat,Animal))
True
True
True
True