zoukankan      html  css  js  c++  java
  • Python基础(六)——面向对象编程

    (1)定义类和实例

      这一部分难得和 Java 较为一致,直接写个例子:

    1 class Stu:
    2     def __init__(self, name, id): # 构造方法
    3         self.name = name
    4         self.id = id
    5     def test(self, name2):
    6         print('He is {}'.format(name2))
    7 student = Stu('Bob', '123')
    8 print(student.name, student.id) # Bob 123
    9 student.test('LQ')

      注意一点:类中自定义的方法一定要含有 self 参数,但是在调用的时候,无需为此传递参数。

      如果需要将name或者id设置成私有变量,则加上短横线如:self._name 与 self._id 。则通过 get/set 方法进行控制(避免传入不必要参数)。

      Python 中 _***_ 结构的变量是特殊变量(不是私有变量),特殊变量是可以直接访问的。

    (2)继承和多态

      主要是语法,内容应该都熟悉:

     1 class Animal(object):
     2     def run(self):
     3         print('Animal is running...')
     4 
     5 # 子类方法继承父类方法
     6 class Dog(Animal):
     7     pass
     8 d = Dog()
     9 d.run() # Animal is running...
    10 
    11 # 子类方法覆盖父类方法.多态
    12 class Cat(Animal):
    13     def run(self):
    14         print('Cat is running...')
    15 c = Cat()
    16 c.run()  # Cat is running...
    17 
    18 print(isinstance(c, Cat)) # True
    19 print(isinstance(c, Animal))  # True

    (3)动态语言 vs 静态语言

      静态和动态是相对的,C/C++/Java 是静态语言,Python是动态语言。具体来说,在静态语言中每个变量都有固定的变量类型比如Java 中 String str = 'abc',那么此时 str = 1 这样的赋值语句会报错。相反,动态语言中定义变量无需固定死变量类型,a = 1 之后 a = '111' 也不会报错。

      静态变量易于调试,因为在内存中固定为某一区域且易于月度,动态变量书写随意,不易调试(因为变量可能别重新定义成另一种类型)不易阅读。 

      动态语言的编程称为鸭子类型,例如迭代对象需要有_inter()_,动态语言中不需要管这个对象是继承下来的还是什么,只要有这个方法,就被当作可迭代对象(秀晕了)。

    (4)_slots_

      动态语言允许我们给类或者实例随意绑定方法和属性:

     1 class Stu():
     2     pass
     3 
     4 def hello(self):  # 如果要将该方法绑定给某个实例,self 参数不可少
     5     print('开心就vans了')
     6 
     7 student = Stu()
     8 
     9 # 给实例绑定属性
    10 student.name = '2222'
    11 print(student.name)
    12 
    13 # 给实例绑定方法。但是对其他实例不起作用
    14 from types import MethodType
    15 student.hello = MethodType(hello, student)
    16 student.hello()  # 开心就vans了
    17 
    18 # 给Class绑定方法
    19 Stu.hello = hello
    20 student2 = Stu()
    21 student2.hello()  # 开心就vans了

      如果我们需要对类进行限制,比如只能绑定 name、id 两个属性,可以使用_slots_ :(但是_slots_对继承的子类没有约束

     1 class Stu():
     2     __slots__ = ('name', 'id')
     3     pass
     4 
     5 student = Stu()
     6 
     7 # 给实例绑定属性
     8 student.name = '2222'
     9 student.age = 22  # 绑定失败
    10 print(student.name)
    11 print(student.age)

      

  • 相关阅读:
    主动一点
    白鱼泡湿地公园
    Google管理制度(东北分公司)
    碎嘴子
    升级的时代
    SD2.0大型网站架构讨论沙龙
    旅途摘抄《12条职场秘笈》
    fscache 调研
    lxccheckpoint 一些 比较老的资料
    folly,facebook刚刚开源的底层c++函数
  • 原文地址:https://www.cnblogs.com/KongHuZi/p/10890172.html
Copyright © 2011-2022 走看看