面向对象编程之一

本文深入讲解面向对象编程的基本概念,包括对象、类、实例的区别,以及属性、方法、继承、多态等核心特性。探讨了类的方法类型,如实例方法、类方法、静态方法,并介绍了类的定义、类型判断、初始化方法、构造方法和析构方法。

1.基本概念

对象:object,

类:一种事物的范称,一种归纳一种抽象,如鼠标

实例:具体的某个类的一个对象 叫实例

2. 面向对象  面向过程

针对一件事情,第一步  第2步 第3步   面向过程

面向对象: 关注一个对象具备哪些方法和属性。

3. 对象(属性及方法)

属性:封装, 继承,多态

方法:类方法,静态方法,实例方法

实例方法
必须由实例调用,先要有个实例,然后才能调用实例方法。定义时第一个参数必须为self

类方法:定义时第一个参数必须为cls, 并且要加classmethod装饰器@classmethod # 类方法 cls:代表类本身
def get_class_name(cls):
实例可以调用,类也可以调用。

静态方法:定义时参数没什么要求,加@staticmethod 装饰器 self cls类可以调用实例可以调用, 和调用 ”其他函数“ 一样。

方便直接去使用一些公用的函数或把部分复杂逻辑抽象出来。
静态方法中做的事情不依赖我们的实例或对象

4. 类的定义
class Fish:
  def __init__(self):
         pass
  def get_name(self):
    pass

5.判断类型

isinstance(实例,类)  判断实例是否为类的一个对象。

新式类,经典类(无继承)
class Fish: # 经典类, 不继承自任何类的 python2.2
class Dog(object): # 新式类, 必须继承自某个类。 如果没有那就是继承自 object,从python2.2之后

python3: 都是新式类  class Fish: 新式类,   class Fish(object):

6. 初始化方法, 构造方法, 析构方法
这三个方法可以完全不定义了。

__init__ __new__ __del__
__new__ __init__ __del__
__init__: 初始化方法。 对已产生的实例做一些初始化事情。
__new__: 构造方法 产生一个具体的实例
__del__: 析构方法 做些收尾工作, 垃圾回收清理。 引用计数
__call__:  特殊方法:把类实例化后的对象当做函数来调用的时候自动被调用

eg.__call__方法的使用:

import random
class A:
def __init__(self,items):
self._items = list(items)
random.shuffle(self._items)
def pick(self):
try:
return self._items.pop()
except IndexError:
raise LookupError('pick from empty A')
def __call__(self, *args, **kwargs):
return self.pick()

B = A(range(3))
print(B.pick())

7.访问作业域控制变量
1)__init__ 左右两边两个下划线,表示类的调用
2)__age: 左边两个下划线,私有变量
3)_age: 左边一个下划线,保护变量
举例说明:
class Student:
def __init__(self,name,age,class_):
self.name = name
self.age = age
self.class_ = class_
print("这里调用了__init__方法")
def __new__(cls,*args,**kwargs):
print('这是调用了__new__调用了一个实例')
return object.__new__(cls)
def __del__(self):
print('这是调用了析构函数')

class Boy(Student):
def __init__(self,name,age,class_,score):
self.score = score
super(Boy,self).__init__(name,age,class_)
print('%s,%d,%s,%d' %(self.name,self.age,self.class_,self.score))

def get_score(self):
print('成绩为:%d' %(self.score))
@classmethod
def get_name(cls,name):
cls.name = name
print(cls.name)
@staticmethod
def get_class(class_):
return class_
A=Boy('小明',age=18,class_='python',score=19)
A.get_score()
A.get_name('xiaohu')
print(A.get_class(class_='python1'))

转载于:https://www.cnblogs.com/fei-xiang/p/9927581.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值