• python 面向对象(二)成员


    ##################################总结###########################

    类的成员:

      变量:

        实例变量      对象.属性=xxx

        类变量       共享给所有该类的对象 类.变量

      方法:

        实例方法,   对象.方法()     ###加了self的.调用的时候。必须用对象去访问. (重点)

          def method(self):

            pas

        类方法,一般都使用类名.方法() ###当方法需要传递类名的时候. 需要类方法. 

          @classmethod

          def method(cls):

        静态方法,写在类力的函数,一般使用类名.方法()  ###当你的方法不需要传递当前类的对象的时候。

          @staticmethod

          def method():

            pass

    例子########

    class Foo:

      def m1(self):

        pass

      @classmethod

      def m2(cls)

        pass

      @staticmethod

      def m3():

        pass

    f=Foo()

    f.m1()

    Foo.m2()

    Foo.m3()

    属性:

      @property

      作用:把一个方法变成属性.

      有些属性必须经过计算而得到(比如出生算年纪)

      @property

      def age(self):

        run 2018-self.birth

    print(p.age)#没加小括号

    私有:

      __开头的东西就是私有的

       只有在自己类中使用

    class Foo:
        name='aa'
        def __init__(self,name):
            self.name=name
        def m1(self):
            print('m1111')
        @classmethod
        def m2(cls):
            return cls.name
        @staticmethod
        def m3(a,b):
            return a+b
        @property
        def bin(self):
            return '这个是%s'%(self.name)
    f=Foo('zaizai')
    f.m1()#调用方法
    cls=Foo.m2()
    print(cls)#普通方法,若要在不用类名中 每次都要self.name
    static=Foo.m3(1,2)
    print(static)#当你的方法不需要传递当前类的对象的时候
    print(f.bin)
    class Person:
        def __init__(self):
            pass
        # 实例方法需要传递类的对象 self
        def think(self):
            print("人能思考")
        # 静态方法不需要传递对象或者类
        @staticmethod  # 静态方法
        def jisuan(a, b):
            print("我来过这里")
            return a + b
    # 类方法: 第一个参数传递的是类名 @classmethod def clsMethod(cls): # cls表示的类 p = cls() # 可以动态的创建对象. print("我是一个类方法", p) p = Person()
    p.think() #实例方法
    # 静态方法的调用: c = Person.jisuan(1, 2) # 类名访问 print(c)

    #类方法调用 Person.clsMethod()
    # 类方法默认第一个参数接收的是类名
    p.clsMethod() # 在调用类方法的时候. 默认的把类名传递给类方法 
    #<bound method Person.he of <class '__main__.Person'>>
    Person.clsMethod  # 推荐类名调用

    结果:

    我来过这里
    3
    我来过这里
    8
    我是一个类方法<class '__main__.Person'>

    4.用方法来描述一个属性

     @property

     方法只能有一个参数

        方法必须有返回值

    class Person:
        def __init__(self, name, gender, birth):
            self.name = name
            self.gender = gender
            self.birth = birth  # 2000  2018
        # 年龄 -> 应该是算出来的. 而不是直接存储
        @property # 把一个方法更改成一个属性, 每次拿属性的时候都会自动的去执行这个方法
                    # 方法的返回值就是属性值
        def age(self):  # 实例方法
            print("我是方法")
            return 2018 - self.birth
    
    p1 = Person("武sir", "未知", 2000)
    print(p1.age) # 看着像一个变量一样使用, 实际上这里是调用的一个方法 不用加()
    print(p1.age)
    # p1.age = 26 # 不可以的, 因为age是一个方法. 不是一个变量

    5.私有

    只能在自己类中访问. 带有前置双下环线的内容

    __方法
    __变量
    __类变量
    都是私有. 比人访问不到. 包括他儿子.

    class Person:
        __qie = "潘潘" # 类变量
    
        def __init__(self, name, mimi):
            self.name = name
            self.__mimi = mimi # 私有内容 实例变量
    
        def gaosu(self):
            print(f"把秘密告诉了太白, 第二天所有人都知道了{self.__mimi}")
            print(Person.__qie) # 私有的类变量只能在类中调用
            # return self.__mimi
    
        def __yue(self): # 私有的实例方法
            print("我要和宝宝约")
    
        @staticmethod
        def __koujiao():
            print("test希望和嫂子一起抠脚")
    
        @classmethod
        def __fangqi(cls):
            print("和嫂子一起放气")
    p = Person("wusir", "和嫂子的故事")
    # print(p.__mimi) # 私有的内容只能在类里面调用
    p.gaosu()
    
    # print(Person.__qie)
    a = Person("wusir", "嫂子的故事")
    # a.__yue()
    # Person.__koujiao()

    ########结果###########

    把秘密告诉了太白, 第二天所有人都知道了和嫂子的故事
    潘潘

     
    不怕大牛比自己牛,就怕大牛比自己更努力
  • 相关阅读:
    栈的实现
    函数传值 传地址 传引用的区别【转】
    sql server数据库最大Id冲突问题解决方法之一
    c#3.5关于JSON简单操作的实用帮助类(泛型实现)
    OLLYDBG
    SocketException.ErrorCode 列表及注释,Winsocket Error 列表及注释
    Netbeans5.5.1 连接 Mysql
    大型互联网网站架构心得之一:任务拆分
    工作流(WF)中使用SqlWorkflowPersistenceService创建完全的持久性服务
    Windows Phone学习笔记
  • 原文地址:https://www.cnblogs.com/zaizai1573/p/10137976.html
Copyright © 2020-2023  润新知