学习Python的第四天

面向对象编程基础
类和对象
类是对象的蓝图和模板,而对象是类的实例。
定义类

class Student(object):

    # __init__是一个特殊方法用于在创建对象时进行初始化操作
    # 通过这个方法我们可以为学生对象绑定name和age两个属性
    def __init__(self,name,age):
        self.name = name
        self.age = age
      

说明:写在类中的函数,我们通常称之为(对象的)方法,这些方法就是对象可以接收的消息

class Student(object):
    """
    第二步初始化,初始化自己
    当你的类有一些公用变量的时候,你就可以初始化
    初始化中经常放入公有的变量
    """
    def __init__(self,name):
        """
        在类中,一切的变量和函数都要印记(self)
        """
        self.name = name
    def def1(self,num):
        self.num = num
        print(self.num)
        print(self.name)
    def def2(self):
        print(self.num)
        print(self.name)

if __name__ == "__main__":
   #实例,类名带括号“Student()”,直接运行初始化函数
   student = Student('杜苗苗')
   student.def1(100)
   student.def2()

创建和使用对象
当我们定义好一个类之后,可以通过下面的方式来创建对象并给对象发消息

def main()
    # 创建学生对象并指定姓名和年龄
    stu1 = Student('骆昊',38)
    # 给对象发study消息
    stu1.study('Python程序设计')

if __name__ == ' __main__':
   main()
    

访问可见性问题
#私有变量,变量名前面加“——”
#如果非要使用私有变量,那么可以使用dir(class())f去查看它真正的名字
私有变量/函数,在类内部可以直接调用
#如果你想体现一个变量/函数特别重要你可以使用“-”

class Test:

     def __init__(self,foo):
         self.__foo = foo
    
     def __bar(self):
         print(self.__foo)
         print('__bar')

def main():
    test = Test('hello')
    # AttributeError: 'Test' object has no attribute '__bar'
    test.__bar()
    #AttributeError: 'Test' object has no attribute '__foo'
    print(test.__foo)


if __name__ == "__main__":
   main()

面向对象的支柱
面向对象有三大支柱:封装、继承和多态。

静态方法和类方法

from math import sqrt

class Triangle(object):
   
   def __init__(self,a,b,c):
       self._a = a
       self._b = b
       self._c = c

       @staticmethod
       def is_valid(a,b,c):
           return a + b > c and b + c >a and a + c > b

       def perimeter(self):
           return self._a + self._b + self._c

       def area(self):
       half = self.perimeter() / 2
       return sqrt(half * (half -self._a) *
                  (half - self._b) * (half -self._c))
                  


类之间的关系
简单的说,类和类之间的关系有三种:is-a、has-a和use-a关系。

  • is-a关系也叫继承或泛化,比如学生和人的关系、手机和电子产品的关系都属于继承关系。
  • has-a关系通常称之为关联,比如部门和员工的关系,汽车和引擎的关系都属于关联关系;关联关系如果是整体和部分的关联,那么我们称之为聚合关系;如果整体进一步负责了部分的生命周期(整体和部分是不可分割的,同时同在也同时消亡),那么这种就是最强的关联关系,我们称之为合成关系。
  • use-a关系通常称之为依赖,比如司机有一个驾驶的行为(方法),其中(的参数)使用到了汽车,那么司机和汽车的关系就是依赖关系。

继承和多态
在已有类的基础上创建新类,这其中的一种做法就是让一个类从另一个类那里将属性和方法直接继承下来,从而减少重复代码的编写。提供继承信息的我们称之为父类,也叫超类或基类;得到继承信息的我们称之为子类,也叫派生类或衍生类。子类除了继承父类提供的属性和方法,还可以定义自己特有的属性和方法,所以子类比父类拥有的更多的能力,在实际开发中,我们经常会用子类对象去替换掉一个父类对象,这是面向对象编程中一个常见的行为,对应的原则称之为里氏替换原则。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值