我对Python中面向对象的一些总结

      回过头来再看看关于面向对象的基础知识,然后做个总结。也算是重新梳理一遍吧。首先,总的来说面向对象包含封装、继承、多态三个大特性。这部分内容主要总结的是封装。

       我所理解的封装其实就是打包起来,或者说是隐藏起来的意思,通过封装将类和对象有机地统一起来,从而能够利用类来描述一个事物。下面将总结一些关于类的基本操作。

(1)
类的定义格式
class 类名:
    #定义属性
    def __init__(self,参数列表):
        self.属性名1 = 数值1
        self.属性名2 = 数值2
        ...
    #定义方法
    def 方法名1(self,参数列表):
        方法体
    def 方法名2(self,参数列表):
        方法体
    ....
例如
class Huoying:
#定义属性
def __init__(self):
self.name = "二狗"
self.age = "21"
self.height = 180
#定义方法
   """
    这里的self表示正在调用这个方法的对象
    """
def ability(self)
print("All powerful")
对象的创建和调用

"""

(2)

a.创建对象的格式:
    对象名 = 类名()
    
b.调用对象的属性的格式
    对象名.属性名
    
c.调用对象的方法的格式:
    对象名.方法名(实参列表)
    
    在调用方法时不需要给self形参传值,它的值是解释器自动传递过去的.
    如果在定义方法时,方法中除了self参数之外没有其它参数,那么在调用这个方法时,不需要传实参列表
"""
#创建对象
NB = Huoying
#调用属性
NB.name
NB.age
NB.height
上面这三行需要打印
#调用方法
MN.ability()
上面这行不需要打印


# 一个类可以创建多个对象,且在调用这些对象的属性和方法时,是各不相干的
NB1 = Huoying
NB2 = Huoying


""" __init__方法的作用: 定义属性,并初始化属性(给属性赋值)
    这个方法在什么时候调用?
        在对象创建出来后解释器会立即调用这个方法,给对象设置属性,并初始化


    self的含义:
        self表示当前对象,刚刚创建出来的那个对象
"""

(3). 在定义属性的时候有三种方式可选,如下:

a.在类的__init__方法里面定义属性,见上文(1)中
b.在类的外面调用的时候定义
class Student:


def __init__(self,name,age):
# 给Student类的所有对象设置这些属性
self.name = name
self.age = age
# self.p_t = parent

s1 = Student("小明",20)
# 在类的外面给对象添加属性,并赋值
s1.p_t = "大明"
print(s1.p_t)

# 修改属性p_t的值
s1.p_t = "小明"

c.在类的方法里面定义
class Student:

def __init__(self,name,age):
# 给Student类的所有对象设置这些属性
self.name = name
self.age = age
# self.p_t = parent


def study(self,gender):
# 给对象添加一个属性
self.gender = gender


s1 = Student("贤哥",23)
print(s1.name)
print(s1.age)

print(s1.gender)
s1.study("男")

在上述方法中,一般都只用法一,剩余两种不太常用。

(4). 关于私有属性和私有方法

    我对私有属性和方法的理解就是,既然是私有的那么就不可以随便使用,因此,比普通的属性和方法的操作要更复杂一些。

a.私有属性:在属性前面加__,只能在内部调用
b.私有方法:在方法前面加__,只能在内部使用
如果想在类外给私有属性赋值,则需要定义set和get方法,示例如下
class Person:
def __init__(self,name,age):
# 把age设置成私有的,属性名变成了__age
# 私有属性只能在类的里面访问,不允许在类的外面访问
self.__age = age
self.name = name

"""
在类的里面添加一个方法:set_xxx(self,xxx)
在类的外面通过对象调用这个方法,给私有属性___age赋值
"""
def set_age(self,age):
if age <= 150 and age >= 0:
# 给私有属性__age赋值
self.__age = age
else:
print("年龄不合法,赋值失败!!!")
"""
在类的里面添加一个方法:get_xxx(self)
在类的外面可以通过对象调用这个方法,获得私有属性__age的值
"""
def get_age(self):
# 返回私有属性__age的值

return self.__age

      打印私有属性和私有方法:

p1.set_age(1000)
age = p1.get_age()

print(age)

(5). 四个魔法方法

a.__new__:使用该方法创建对象,具体是通过调用父类的new方法传进对象并返回
 

示例一:

class Person:

    """
    这个方法是用来创建对象的
    """
    def __new__(cls,name,age):
        # 调用父类的new方法创建对象,并返回
        return object.__new__(cls)

b.__init__:该方法是用来给对象设置属性的,设置属性并且初始化属性,在调用该方法之前对象已经创建出来了

    """
    这个方法:
        1.设置属性
        2.初始化属性
        3.这个方法被调用之前,对象已经被创建出来了

"""

def __init__(self,name,age):
# 把age设置成私有的,属性名变成了__age
# 私有属性只能在类的里面访问,不允许在类的外面访问
self.__age = age
self.name = name

c.__str__:该方法是用来转换类型的,转换成字符串类型,,,也可以在打印对象之前调用该方法得到一些返回值
如果不定义该方法,在打印对象时,得到的是对象的地址,定义之后,打印出来的是相应的返回值

"""
如果没有先调用str方法,则返回一个地址
但是打印对象时,如果先调用对象的str方法得到一个返回值,则打印返回值而不是地址
"""
s1 = Student("四哥",23)
# 当调用str(s1)时,解释器会自动调用__str__方法,并返回结果
str_s1 = str(s1)
print(str_s1)

d.__del__:该方法并不是用来删除对象的,是在对象被删除之前打印一些说明的

def __del__(self):
"""
这个方法不是用来删除对象的,没有删除对象的功能
解释器会在对象即将被删除时,自动调用这个方法
通常在这个方法中做临终遗言
"""

print(self.name+"即将被删除...")

能力有限,请多多指教。

猜你喜欢

转载自blog.csdn.net/cestlavieqiang/article/details/81032175