• python 类和对象


    面向对象编程将数据和操作数据相关的方法封装到对象中,组织代码和数据的方式更加接近人的思维,从而大大提高了编程的效率。

    python完全采用了面向对象的思想,是真正的面向对象语言,完全支持面向对象的基本功能,例如:继承,多态,封装等。

    Python中一切皆对象,我们所学的数据类型,函数等,都是对象。

    >>> class Student:

    company='百度'    #类属性

    count=0           #类属性

    def __init__(self,name,score):

    self.name=name       #实例属性

    self.score=score     #实例属性

    Student.count += 1

    def say_score(self):          #实例方法

    print('我的公司是:',Student.company)

    print(self.name,'的分数是:',self.score)

    class Student:
        company="baidu"
        count=0
        def __init__(self,name,score):
            self.name=name
            self.score=score
            Student.count += 1
        def say(self):
            print('公司名字:',Student.company)
            print(self.name,'分数是:',self.score)
    
    #Student.say(self) #报错
    a=Student('bob',200)
    a.say()


    结果

    公司名字: baidu
    bob 分数是: 200

     
    class User:
        def walk(self):
            print(self,'正在慢慢的走')
        def stand(self):
            print(self,'正在站着')
            User.walk(self)  #这里调用walk函数的方法得类.方法(参数)
    User.walk('dog')
    #User.walk() #报错,因为没有self参数传入,但是self如果有默认参数值则不会出错 u
    =User() u.walk() u.stand() #u.walk('cat') #报错,因为u=User()已经传递了参数,cat和之前的参数冲突 User.stand('cat')
    dog 正在慢慢的走
    <__main__.User object at 0x000002A7F0D352E8> 正在慢慢的走
    <__main__.User object at 0x000002A7F0D352E8> 正在站着
    <__main__.User object at 0x000002A7F0D352E8> 正在慢慢的走
    cat 正在站着
    cat 正在慢慢的走

    python的类可以调用实例方法,但使用实例方法时,python不会自动为方法的第一个参数self绑定参数值。程序必须显式地为第一个参数self传入调用者,这种调用方式成为“未绑定方法”

    类方法与静态方法

    python的类方法和静态方法很相似,他们都推荐使用类方法来调用,类方法和静态方法的区别在于:python会自动绑定类方法的第一个参数,类方法的第一个参数(通常建议参数名为cls)会自动绑定到类本身,但对于静态方法则不会自动绑定

    使用@classmethod修饰的方法就是类方法

    使用@staticmethod修饰的方法就是静态方法

    class User:
        @classmethod
        def walk(cls):
            print(cls,'正在慢慢的走')
        @staticmethod
        def stand(p):
            print(p,'正在站着')
            User.walk(p)
    #User.walk()
    #u=User()
    #u.walk()
    #u.stand()
    #u.walk('cat')  #报错,因为u=User()已经传递了参数,cat和之前的参数冲突
    #User.stand('cat')
    User.walk()
    #User.stand('bob') #报错,两个参数值,因为stand调用了walk类方法。会自动传入第一个参数
    #User.stand() #报错,p没有参数值传入。
    View Code

    上述代码中stand调用了walk方法。传入参数容易出错。

     
    class User:
        @classmethod
        def walk(cls):
            print(cls,'正在慢慢的走')
        @staticmethod
        def stand(p):
            print(p,'正在站着')
    User.walk()
    #User.stand() #报错,无参数传入
    User.stand('honey')
    u=User()
    u.walk()
    #u.stand() #报错无参数p传入
    u.stand('dog')

    结果

    <class '__main__.User'> 正在慢慢的走
    honey 正在站着
    <class '__main__.User'> 正在慢慢的走
    dog 正在站着
  • 相关阅读:
    Simpo
    Numpy技巧
    流程图
    注册免费试用12个月的亚马逊AWS云计算服务
    java-Collection
    CoreGraphic
    吴裕雄--天生自然python学习笔记:python 用pygame模块开发俄罗斯方块游戏
    吴裕雄--天生自然python学习笔记:python 用pygame模块检测键盘事件和鼠标事件
    吴裕雄--天生自然python学习笔记:python 用pygame模块角色类(Sprite)移动与碰撞
    吴裕雄--天生自然python学习笔记:python 用pygame模块动画一让图片动起来
  • 原文地址:https://www.cnblogs.com/inuyashalove/p/12777563.html
Copyright © 2020-2023  润新知