zoukankan      html  css  js  c++  java
  • Python3 面向对象编程

    1、面向对象编程的特征

    1、封装:对外部隐藏对象的工作细节

    2、继承:子类可以继承父类的属性和方法

    3、多态:不同类的对象可以调用相同的函数名,但结果不同

    >>> "FishC.com".count('o')
    1
    >>> [1, 1, 2, 3, 5, 8].count(1)
    2
    >>> (0, 2, 4, 8, 12, 18).count(1)
    0

    2、self参数的作用

    绑定棒法(对象.方法),对象在使用方法是会把对象名传递给self参数,这样python就知道哪个对象在调用方法了

    3、不希望对象的属性被外部直接引用的方法(“私有化”)

    在属性前加上双下划线,但这种方法仍可以用“_类名__变量名”访问

    >>> class Person:
    __name = '小甲鱼'
            def getName(self):
                    return self.__name
    
    >>> p = Person()
    >>> p.__name
    Traceback (most recent call last):
      File "<pyshell#56>", line 1, in <module>
        p.__name
    AttributeError: 'Person' object has no attribute '__name'
    >>> p.getName()#内部访问
    '小甲鱼'

    4、魔法方法(构造方法)__init__(self)

    __init__方法在类被实例化之后会被自动调用,可以重写这个方法为对象指定初始化方案

    5、模拟小游戏乌龟吃鱼

    import random as ra
    
    class Turtle:
        def __init__(self):
            self.x=ra.randint(1,10)
            self.y=ra.randint(1,10)
            self.spirit=100
        def move(self):
            new_x=self.x+ra.choice([1,2,-1,-2])
            new_y=self.y+ra.choice([1,-1])
            
            if new_x < 0:
                new_x=0-new_x
            elif new_x > 10:
                new_x=10-(new_x-10)
            else:
                self.x = new_x#移动到新的位置
    
            if new_y < 0:
                new_y=0-new_y
            elif new_y > 10:
                new_y=10-(new_y-10)
            else:
                self.y = new_y#移动到新的位置
            self.spirit -= 1
            return (self.x,self.y)
        def eat(self):
            self.spirit+=20
            if self.spirit>=100:
                self.spirit=100
    
    class Fish:
        def __init__(self):
            self.x=ra.randint(1,10)
            self.y=ra.randint(1,10)
        def move(self):
            new_x=self.x+ra.choice([1,-1])
            new_y=self.y+ra.choice([1,-1])
    
            if new_x < 0:
                new_x=0-new_x
            elif new_x > 10:
                new_x=10-(new_x-10)
            else:
                self.x = new_x#移动到新的位置
    
            if new_y < 0:
                new_y=0-new_y
            elif new_y > 10:
                new_y=10-(new_y-10)
            else:
                self.y = new_y#移动到新的位置  
            return (self.x,self.y)
            
    fish=[]#鱼缸
    t1=Turtle()#产生一直乌龟
    for i in range(10):#产生10条鱼
        new_Fish=Fish()
        fish.append(new_Fish)
    
    while True:
      
        if not t1.spirit:
            print('乌龟体力耗尽游戏结束')
            break
        if not len(fish):
            print('鱼被吃完游戏结束')
            break
        pos = t1.move()
        for each_Fish in fish[:]:
            each_Fish.move()
            if each_Fish.move()==pos:
                t1.eat()
                fish.remove(each_Fish)
                print("一条鱼被吃掉了!")
  • 相关阅读:
    Neko's loop HDU-6444(网络赛1007)
    Parameters
    SETLOCAL
    RD / RMDIR Command
    devenv 命令用法
    Cannot determine the location of the VS Common Tools folder.
    'DEVENV' is not recognized as an internal or external command,
    How to change Visual Studio default environment setting
    error signing assembly unknown error
    What is the Xcopy Command?:
  • 原文地址:https://www.cnblogs.com/PythonFCG/p/8413645.html
Copyright © 2011-2022 走看看