类与对象,面向过程,面向对象【Python】

一.面向过程是⼀种“执行者思维",解决简单问题可以使用面向过程(自己做事)

     面向对象是⼀种“设计者思维”,解决复杂、需要协作的问题可以使用面向对象(安         排别人做事)

二.类与对象:

类是对一类事物的描述,它定义了该事物的属性(状态)和行为(方法)
对象:类的实例,是类的具体实现。包含了类的属性值和方法代码,可以直接访问和操作

__init__方法的注意事项

1.如果实例化对象时没有传入参数,则默认调用无参构造方法__init__
2.如果实例化对象时传入参数,则调用有参构造方法
3.如果手动创建有参构造方法__init__,则实例化对象时必须传入参数
class Student:
     name = "李四"
     age = 19
     gender = "男"  #以上三个是类属性,如果按这样的方式定义,那么这 
                     些属性就全都是固定的,所以不推荐使用
#所以推荐使用“构造方法”来定义属性,即__init__() ⽅法:初始化创建好的对象
     def __init__(self,name,age,gender):
         self.name = name
         self.age = age
         self.gender = gender
 #定义方法
     def study(self):
         print(self.name + "正在学习...")
     def classing(self):
         print(self.name + "正在上课...")
s1 = Student("张三", 18,"男") # 实例化对象,并传⼊参数
s1.study()
s1.classing()

三.Python是⾯向对象的语⾔,⽀持⾯向对象编程的三⼤特性:继承封装(隐藏)、多态

1.封装:

私有属性写法:__类属性名  

私有方法写法:__方法名(self)

如果想打印私有属性和私有方法,可以使用以下方法打印

# 打印私有属性: 对象._类名__私有属性名
# print(t1._Teacher__school)
# 调用私有方法: 对象._类名__私有方法名
# print(t1._Teacher__show_salary)

如果想打印对象所有属性和方法,可以使用dir( )关键字,例如:

print(dir(t1)) #打印对象所有属性和方法
class Teacher:
    __school = "文理学院"  #私有成员属性,只能在类内部访问

    def __init__(self,name,age,salary):
        self.name = name
        self.age = age
        self.__salary = salary  #私有属性
    def show_school(self):
        print(self.__school) #访问私有属性
    def __show_salary(self): #私有方法
        print(self.__salary)

#实例化对象
t1 = Teacher("张三",19,2000)
t1.show_school()  #可以访问__school
# print(t1.__school) #不能在类外访问
# t1.__show_salary()  #不能在类外调用私有方法

2.继承:

格式:class 子类(父类):

注意:必须要同类型才能使用“+”号,如果要调用父类的构造函数,要使用下面的关键字

super()
1. ⼦类不重写 __init__ ,实例化⼦类时,会⾃动调⽤⽗类定义的 __init__ 。
2. ⼦类重写了 __init__ 时,实例化⼦类,就不会调⽤⽗类已经定义的 __init__
3. 如果重写了 __init__ 时,要使⽤⽗类的构造⽅法,可以使⽤ super 关键字
class Person:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def say_hello(Self):
            print("Hello")


class Student(Person):

    def __init__(self,name,age,grade):
        self.grade = grade
        super().__init__(name,age)  #调用父类的构造函数, 
                                     super()-->指代父类对象
    def study(self):
        print(self.name + "studying" + str(self.grade))
stu1 = Student("张三",23,89)
print(stu1.name,stu1.age)
stu1.study()
stu1.say_hello()

3.多层继承和多重继承:

多层继承:

A类继承B类,B类继承C类(推荐使用)
class A: pass # 定义⼀个空类A,不继承任何类
class B(A): pass # B继承A
class C(B): pass # C继承B

多重继承:(不推荐使用)

class A: # 定义⼀个类A
 def aa(self):
 print("aa")
class B: # 定义⼀个类B
 def bb(self):
 print("bb")
class C(B, A): # 定义⼀个类C,继承了A和B两个类
 def cc(self):
 print("cc")

 4.多态:是指同⼀个⽅法调⽤由于对象不同可能会产⽣不同的⾏为。

class Animal: # 定义⼀个动物类:⽗类
 def shout(self): # 定义⼀个shout⽅法
 print("动物叫了⼀声")
class Dog(Animal): # 定义⼀个狗类:⼦类
 def shout(self): # 重写⽗类的shout⽅法
 print("⼩狗,汪汪汪")
class Cat(Animal): # 定义⼀个猫类:⼦类
 def shout(self): # 重写⽗类的shout⽅法
 print("⼩猫,喵喵喵")
def animalShout(a):
 a.shout() # 传⼊的对象不同,shout⽅法对应的实际⾏为也不同。
animalShout(Dog()) # 传⼊⼀个Dog类的对象
animalShout(Cat()) # 传⼊⼀个Cat类的对象

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值