面向对象编程 object oriented programming(OOP)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/dongzixian/article/details/89856986

面向对象编程,是一种编程方式,这种编程方式需要使用“对象”来实现

对象的特征

  • 世间万物皆对象
  • 每个对象都是唯一的
  • 对象具有属性和行为(对象的行为包括具有的功能及具体的实现)
  • 对象具有状态
  • 对象分为类对象和实例对象两大类
    类对象:具有相同属性和行为的实例对象的抽象
    类对象是实例对象的模板,实例对象是由类对象创建出来的

面向对象编程的大体步骤

1.抽象出类对象
2.抽象出类对象的属性
3.抽象出类对象的行为(方法)
4.根据类对象创建实例对象
5.通过实例对象访问属性和方法

取名规则

  • 大驼峰规则:
    每个单词首字母大写
  • 小驼峰规则:
    第一个单词首字母小写,其他大写

定义类对象的语法格式:

class 类名(object):
#属性与方法
(object)表示该类对象继承自python内置的类对象object,python中所有的类对象都继承自一个统一的基类:object
例:class SomeClass(object):
....... pass

#初识属性:
class Cat(object):
    def __init__(self,breed,name,age,health):
        self.breed = breed
        self.name = name
        self.age = age
        self.health = health
        
  
  #初识类的方法:
     def run(self):
        print("a")
     def miao(self):
        print("b")
     def eat(self):
        print("c")

类的方法与函数的区别:

方法就是定义在类对象中的函数,方法与函数的区别在于:
1.定义方法时。方法的第一个形参表示调用该方法的实例对象,第一个形参的名字通常是self。也可以是其他名称。
2.调用方法时,系统自动将调用该方法的实例对象作为实参传递给第一个形参,第一个实参会传递给第二个形参,第二个实参会传递给第三个形参,以此类推

根据类对象创建实例对象的语法格式为:

类名([实参])

 #根据类对象创建实例对象
cat = Cat("波斯猫","喵喵",1,"很好")
print(cat.breed)

>>>波斯猫
cat.run()
>>>a

实例属性

实例属性指的是实例对象所绑定的属性
绑定实例属性(给实例对象绑定属性)的方式有两种:
1.在类对象的内部(方法中)
语法格式:self.属性名 = 属性值
2.在类对象的外部
python是动态语言,所以,在实例对象创建之后,可以对其动态地绑定属性。
语法格式:实例对象.属性名 = 属性值
如果指定名称的实例属性已经存在,则是对实例属性进行修改

访问实例属性的方式有两种:

1.在类对象的内部(方法中)
语法格式:self.属性名
2.在类对象的外部
语法格式:实例对象.属性名

    class MyClass(object):
 def __init__(self):
     self.ia1 = 18
 def do_sth1(self):
     print(self.ia1)
 def do_sth2(self):
     print(self.ia2)
 def do_another(self):
     self.ia2 = 56
 def do_sth3(self):
     print(self.ia3)
mc = MyClass()
mc.do_sth1()
#mc.do_sth2()(不能调用)

>>>18

mc.do_another()#先调用这个函数
mc.do_sth2()

>>>56

mc.do_sth3()没有定义,出错

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-13-c24edc76ceaa> in <module>()
----> 1 mc.do_sth3()

<ipython-input-11-2614780adaa1> in do_sth3(self)
      9         self.ia2 = 56
     10     def do_sth3(self):
---> 11         print(self.ia3)
     12 mc = MyClass()
     13 mc.do_sth1()

AttributeError: 'MyClass' object has no attribute 'ia3'
mc.ia3 = 66#外部赋值
mc.do_sth3()

>>>66

属性值是跟着对象的

mc2 = MyClass()
print(mc2.ia3)
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-15-8b6c73677368> in <module>()
      1 mc2 = MyClass()
----> 2 print(mc2.ia3)

AttributeError: 'MyClass' object has no attribute 'ia3'
#实例对象.__dict__(可获得该实例对象所绑定的所有属性及其值得字典)
mc.__dict__

>>>{'ia1': 18, 'ia2': 56, 'ia3': 66}

mc2.__dict__

>>>{'ia1': 18}

dir(mc)

['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'do_another', 'do_sth1', 'do_sth2', 'do_sth3', 'ia1', 'ia2', 'ia3']

dir(mc2)

['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'do_another', 'do_sth1', 'do_sth2', 'do_sth3', 'ia1']

猜你喜欢

转载自blog.csdn.net/dongzixian/article/details/89856986