7.5. 类中调用自身方法和函数

7.5.1. 类中调用自身

代码示例

#!/usr/bin/env python
#-*- coding:utf8 -*-
#定义一个函数,求绝对值
def func(x,y):
    return (abs(x),abs(y))

class Ant:
    """
    定义类
    """
    def __init__(self,x=0,y=0):
        """
        构造方法
        :param x: 0
        :param y: 0
        :return:
        """
        self.x = x
        self.y = y
        self.disp_potion()          #用属性调用自身的方法

    def move(self,x, y):
        """
        :param x: 过绝对值函数后的x值
        :param y: 过绝对值函数后的y值
        :return:
        """
        x,y = func(x, y)        #调用外部函数
        self.edit_potion(x, y)
        self.disp_potion()      #调用自身方法

    def edit_potion(self, x, y):
        """
        对初始值0修改,进行+,加的值是edit方法的2个参数
        :param x:
        :param y:
        :return:
        """
        self.x += x
        self.y += y

    def disp_potion(self):
        print("当前位置{} {}".format(self.x,self.y))


hujianli = Ant()
hujianli.move(2,4)
hujianli.move(-9,6)

7.5.2. 类中定义内部类

#!/usr/bin/env python
# -*- coding:utf8 -*-
# auther; 18793
# Date:2019/7/20 15:17
# filename: 类中定义内部类.py
class Car:
    class Door:
        def open(self):
            print("open door....")

    class Wheel:
        def run(self):
            print("car run")


if __name__ == '__main__':
    car = Car()         #实例化car
    backDoor = car.Door()       #内部类的实例化1
    frontDoor = car.Door()       #内部类的实例化2
    backDoor.open()
    frontDoor.open()

    wheel = car.Wheel()
    wheel.run()

输出信息:

open door....
open door....
car run

7.5.3. python的垃圾回收机制

简单了解一下即可,python自带垃圾回收机制

#!/usr/bin/env python
# -*- coding:utf8 -*-
# auther; 18793
# Date:2019/7/20 15:24
# filename: python的垃圾回收机制.py
import gc


class Furit:
    def __init__(self, name, color):  # 初始化name、color属性
        self.__name = name
        self.__color = color

    def getColor(self):
        return self.__color  # 返回color

    def setColor(self, color):
        self.__color = color  # 定义color

    def getName(self):
        return self.__name  # 返回name

    def Setname(self, name):
        self.__name = name  # 定义name


class FruitShop:
    def __init__(self):
        self.fruits = []

    def addFruit(self, fruit):
        """
        添加水果
        :param fruit:
        :return:
        """
        fruit.parent = self  # 把Fruit类关联到FruitShop类
        self.fruits.append(fruit)


if __name__ == '__main__':
    shop = FruitShop()
    shop.addFruit(Furit("apple", "red"))  # 向shop对象中添加两个fruit对象
    shop.addFruit(Furit("banana", "yellow"))
    print(gc.get_referrers(shop))  # 打印出shop关联的所有对象
    del shop
    print(gc.collect())  # 显示地调用垃圾回收器

输出信息

[{'parent': <__main__.FruitShop object at 0x00000141ACEE5B70>, '_Furit__color': 'red', '_Furit__name': 'apple'}, {'parent': <__main__.FruitShop object at 0x00000141ACEE5B70>, '_Furit__color': 'yellow', '_Furit__name': 'banana'}, {'__spec__': None, 'FruitShop': <class '__main__.FruitShop'>, '__package__': None, '__doc__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00000141A9D810F0>, '__name__': '__main__', '__builtins__': <module 'builtins' (built-in)>, 'shop': <__main__.FruitShop object at 0x00000141ACEE5B70>, 'Furit': <class '__main__.Furit'>, 'gc': <module 'gc' (built-in)>, '__cached__': None, '__file__': 'D:/GitHub/21_staduy_python/8.面对对象编程初探/面向对象程序学习/python类的特殊方法/python的垃圾回收机制.py'}]
372