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("一条鱼被吃掉了!")
  • 相关阅读:
    Apache Kafka:下一代分布式消息系统
    深入理解Java之线程池
    JAVA中线程同步的方法(7种)汇总
    String、StringBuffer与StringBuilder之间区别
    Java中是否可以继承String类,为什么
    JAVA4种线程池的使用
    一分钟教你知道乐观锁和悲观锁的区别
    java常见面试题及答案 11-20(JVM)
    springmvc中的页面解析器ViewResolver不起作用,变量输出字符串的解决方案
    SpringMVC默认欢迎页面的问题
  • 原文地址:https://www.cnblogs.com/PythonFCG/p/8413645.html
Copyright © 2011-2022 走看看