依次分析实现需求的步骤,通过函数一步步实现
优点:性能较好
缺点:不易维护、拓展、复用
把整个需求按功能划分,将有共性部分封装成类(类经过实例化后是对象)。创建对象不是为了完成单一步骤,而是描述在解决问题中的行为
优点:易维护、拓展、复用
缺点:性能较面向过程更低
类是一个模板,对象是一个类的具体事例
class Person:
pass
xiao=Person()
#构造方法: def __init__()
class Person:
def __init__(self,name,age): #属性
self.name=name
self.age=age
def intro(self): #方法
print(f"{self.name}'s age is {self.age}")
class Person:
def __init__(self,name,age):
self.name=name
self.age=age
stu1=Person("xiaomin",12)
stu2=Person("huihui",16)
stu2.age=10
stu2.score="good"
class Person:
def __init__(self,name,age):
self.name=name
self.age=age
def intro(self):
print(f"{self.name}'s age is {self.age}")
stu1=Person("xiaomin",12)
stu2=Person("huihui",16)
stu1.intro()
stu2.intro()
决定属性和行为归属谁的问题,并隐藏对象中一些不希望被外部访问到的属性或方法,确保数据安全
#当有些东西不想被外界获得、修改,在成员属性或者成员方法前面加上__
class Account:
def __init__(self,name,password):
self.__pas=password
self.name=name
def __getpas(self):
print(f"{self.name}'s password is {self.__pas}")
user1=Account("su",123)
print(user1.pas)
user1.getpas()
##>>> AttributeError: 'Account' object has no attribute 'pas'
若想访问私有属性、私有方法
class Account:
def __init__(self,name,password):
self.__pas=password
self.name=name
def __getpas(self):
print(f"{self.name}'s password is {self.__pas}")
user1=Account("su",123)
print(user1._Account__pas)
user1._Account__getpas()
##>>> 123
# su's password is 123
让子类具有父类的特性,提高了代码的重用性,多个子类的相同代码可以放在父类中。在原有父类设计不变的情况下,可以增加新的功能,或改进已有的算法。
class Animal:
def __init__(self,name):
self.name=name
def drink(self):
print("喝")
class dog(Animal):
def drink(self):
print(f"{self.name}喝水")
wancai=dog("wancai")
wancai.drink() ### >>> wancai喝水
使用super().父类方法 来调用父类方法的执行
class Animal:
def __init__(self,name):
self.name=name
def drink(self):
print("喝")
class dog(Animal):
def drink(self):
super().drink()
print(f"{self.name}喝水")
wancai=dog("wancai")
wancai.drink() ### >>> 喝
# wancai喝水
定义:指对象可以有多种形态(多态是方法的多态)
优点:不同的对象调用相同的方法,产生不同的执行结果,增加代码的灵活度
前提:以继承和重写父类方法为前提
class Fruit:
def __init__(self,name):
self.name=name
def say_color(self):
print(f"{self.name} is color")
class Apple(Fruit):
def say_color(self):
print(f"{self.name} is red")
class Orange(Fruit):
def say_color(self):
print(f"{self.name} is orange")
class Banana(Fruit):
def say_color(self):
print(f"{self.name} is yellow")
def what_color(fruit):
if isinstance(fruit,Fruit):
fruit.say_color()
fruit.say_color()
f1=Apple("apple")
what_color(f1)
###>>> apple is red
# apple is red