10.面向对象(类、对象、属性及方法)

1、python是一门解释性语言,同时也是面向对象编程语言

什么面向对象编程?一切皆对象
什么对象?
特征:属性
行为:方法

在面向对象编程中,最常见的表现就是基于类(Class)来表现的,每一个对象实例都有具体的类

2、什么类
1、概念:具有相同的属性和方法的对象的集合(模型)

2、定义类

class 类名:
类主体


class People:
# 属性
pcount=0

#方法:用来描述类的行为
def speak(self):
print('会说话...........')

3)操作类

1)类实例化及类的引用

对象:通过类定义的数据结构实例(类的实例)

实例化:创建一个类的实例,类的具体对象。


class People:
# 属性
pcount=0
name='yourname'

#方法:用来描述类的行为
def speak(self):
print('会说话...........')

#实例化一个对象
Y=People()
# 类的引用:调用属性和方法
print('通过对象引用属性:',Y.name,Y.pcount)
print('通过类引用属性:',People.pcount,People.name)
Y.speak() #通过对象调用,当前方法不可以通过类来进行调用

3、构造函数
该方法在类实例化时会自动调用。
当然, __init__() 方法可以有参数,参数通过 __init__() 传递到类的实例化操作上

class People:
# 属性
pcount=0
name='yourname'

# 构造方法:创建对象时候进行自动调用
def __init__(self,name,age):
self.name=name
self.age=age

#方法:用来描述类的行为
def speak(self):
print('会说话...........')

#实例化一个对象
pix=People('pix',18)
print(pix.name,pix.age)

4、属性

1)类属性
相当于全局变量,实例对象共有的属性,可以通过类或者对象进行调用

2)实例属性
实例对象自己私有。(只有对象可以进行调用)


3)内置属性 通过类来进行调用
类名.__dict__ : 类的属性(包含一个字典,由类的数据属性组成)
类名.__doc__ :类的文档字符串
类名.__name__: 类名
类名.__module__: 类定义所在的模块(类的全名是'__main__.className',如果类位于一个导入模块mymod中,那么className.__module__ 等于 mymod)
类名.__bases__ : 类的所有父类构成元素(包含了一个由所有父类组成的元组)

class People:
'''这是一个人类'''
# 类属性
pcount=0
name='yourname'

# 构造方法:创建对象时候进行自动调用
def __init__(self,name,age):
self.name=name
self.age=age #实例属性:在方法里进行定义

#方法:用来描述类的行为
def speak(self):
print('会说话...........')

#实例化一个对象
pix=People('pix',18)
print('对象调用类属性:',pix.pcount)
print('类调用类属性:',People.pcount)
# 实例属性只能通过对象进行调用
print('实例属性只能通过对象进行调用:',pix.age)
print('内置属性调用',People.__bases__)
print('内置属性调用',People.__doc__)
print(People.__dict__)
print(People.__name__)

4)私有属性 后面讲

5、方法类型

1)实例方法
跟函数差不多,只是带有一个默认参数self
对象可以进行调用,不能通过类来进行调用

2)类方法
带@classmethod装饰器的方法,并且默认参数cls
类和对象都可以进行调用

3)静态方法
由@staticmethod装饰的方法,没有self这个参数,而将这个方法当成一个普通的函数使用。
可以被类或类的实例对象调用


4)内置方法
__init__(self,....):构造方法,在生成对象时调用,可以用来进行一些初始化操作,不需要显示去调用,系统会默认去执行。
__del__(self):析构方法,在释放对象时调用,支持重载,可以在里面进行一些释放资源的操作,不需要显示调用。
__str__(self,…):自定义实例输出方法,写好该方法后,替换实例默认的输出操作。
__getattribute__(...):获取实例属性的值,可直接结合对象使用。


5)私有方法 后面讲

class People:
'''这是一个人类'''
# 类属性
pcount=0
name='yourname'

# 构造方法:创建对象时候进行自动调用
def __init__(self,name,age):
self.name=name
self.age=age #实例属性:在方法里进行定义

def __del__(self):
print('释放对象会调用__del__函数')

def __str__(self):
return "hello testcode"


#实例方法:用来描述类的行为
def speak(self):
print('会说话...........')

@classmethod
def class_methon1(cls):
print('这是一个类方法')
cls.pcount=5
#类方法里面可以调用类属性或类方法

@staticmethod
def static_methon1():
print('这是一个静态方法')

#实例化一个对象
pix=People('pix',18)
# print(pix.pcount)
# 实例方法只能通过对象调用,不能通过类来进行调用
pix.speak()
# 调用类方法
print('类进行调用类方法:',People.class_methon1())
# print(pix.pcount)
print('对象进行调用类方法:',pix.class_methon1())
# 调用静态方法
print('类进行调静态方法:',People.static_methon1())
print('对象进行调用静态方法:',pix.static_methon1())
print("调用__del__()",pix)


6、私有成员(私有方法、私有属性)


类的私有方法:用两个下划线__开头,不能类外部访问,使用时是用self.类私有方法

类的私有属性:两个下划线开头,不能类外部和直接访问,使用是用self.私有属性名

私有属性在外部如何进行访问:对象._类名+私有属性名

类外部方法私有方法:对象._类名+私有方法()
class People:
'''这是一个人类'''
# 类属性
pcount = 0
name = 'yourname'
# 私有属性 类内部可以使用,类的外部不可以使用
__weight=80
def __init__(self,name,age,weight):
# 实例属性
self.name=name
self.age=age
self.__weight=weight

# 实例方法:用来描述类的行为
def speak(self):
print('测码VIP自动化课程')
self.__mimi()

#私有方法
def __mimi(self):
print('这是一个私有方法')

yu=People('鱼',18,120)
# 私有属性如何进行类外部进行访问:对象._类名+私有属性
print('类外部调用私有属性:',yu._People__weight)
# 类外部方法私有方法:对象._类名+私有方法()
yu._People__mimi()
yu.speak()

原文地址:https://www.cnblogs.com/Murraya/p/14020960.html