zoukankan      html  css  js  c++  java
  • python学习 day016打卡 面向对象--成员

    本节主要内容:

    1.类的成员

    2.类的成员-变量

    3.类的成员-方法

    4.类的成员-属性

    5.私有

    一.类的成员:

    能在类中写的内容就是类的成员.

    class 类名:
        #方法
        def __init__(self,参数1,参数2,...):
            #属性变量
            self.属性1 = 参数1
            self.属性2 = 参数2
            ...
        #方法
        def method(self):
            pass

    在上面的代码中__init__和method都属于类的成员方法.又称为实例方法.总之这样的东西需要对象来访问.

    而上方的self.属性1 = 参数1 这个代码的含义是给对象设置属性信息.含义是这个对象的xxx属性是xxx.这种

    东西被称为成员变量或者实例变量,再或者被称为字段.

    二.类的成员-变量

     在类中变量分成两大类:

    1.实例变量(字段)

    2.类变量(静态变量)

    class Person:
        country = "中国"  #类变量
        def __init__(self,name, age):
            self.name = name  #实例变量
            self.age = age
    
    # Person.country = "大清"
    # print(Person.country) # 直接使用类名进行访问
    p1 = Person("alex", 185)
    p1.country = "大清" # 添加了一个实例变量
    print(p1.name)
    print(p1.country)
    
    p2 = Person("wusir", 145)
    print(p2.name)
    print(p2.country)
    
    # 类变量的修改只能通过类

    总结:

    实例变量,给对象用的.

    类变量,多个对象共享的.最好是用类名来访问,这样更加规范.

    二.类的成员-方法

    1.成员方法(实例方法)

    2.静态方法

    3.类方法

    成员方法:对象直接访问的方法叫成员方法

    class Car:
        def run(self):
            print("会跑的车")
    
        def cul(self, a, b):
            return a + b
    
        def jump(self):
            print("you jump i jump")
    
    c = Car()
    c.run() # 调用实例方法
    print(c.cul(1 , 3))
    c.jump()

    静态方法.静态方法不需要我们给方法传递self.也就是说.当出现一个方法不需要使用到成员变量的时候,就可以选择使用静态方法.

    静态方法需要我们在方法上面添加一个@staticmethod

    class Person:
    
        def chi(self): # 实例方法
            print("人在吃")
    
        # 类方法
        @classmethod # 类方法
        def he(cls): # cls 类
            print(cls)
            print("我是喝")
    
        @staticmethod
        def shui():  # 在类中定义的一个普通函数
            print("和你睡不等于睡你 -- 姜文")
    
        @staticmethod
        def 上天(height):  # 在类中定义的一个普通函数
            print("上天%s" % height)
    
    
    print(Person)
    Person.he()
    
    p = Person()
    p.he() # 不管用对象还是用类去访问类方法. 默认传递进去的是类
    
    Person.shui()
    Person.上天(500)
    
    p = Person()
    p.shui()

    静态方法和静态变量一样.一般都是使用类名直接访问和调用的.

    类方法.类方法和静态方法差不多,只不过类方法需要在参数列表中的第一个位置预留一个位置,通常我们给第一个参数起名字叫cls.

    类方法在被调用的时候也不需要传递实例对象.但是系统会自动的吧类传递给第一个参数.类方法在编写的时候需要在类方法上面添

    @classmethod

    三.类的成员-属性

    属性其实就是通过方法改造过来的一种变量的写法,在方法上添加一个@property就可以了

    class User:
        def __init__(self,name,birthday,id):
            self.name = name
            self.birthday = birthday
            self.id = id
    
        @property   # 可以把一个方法变成一个属性
        def age(self):
            return 2018 - self.birthday
    
    u = User("wsx",1988,100)
    print(u.age)

     应用场景:我们一般保存数据的时候,不会保存一个人的年龄.因为随着时间的推移.每个人的年龄都时刻在改变着.那如何保存更加完美呢?

    很简单.保存出生年月日.然后用程序来计算当前的年龄.实时的.这个时候需要进行相应的计算了.二计算属于一个功能.当然要写在方法里.

    但是对于年龄这个属性而言,他就是一个数值,而不是动作,所以python就提供了这样一种机制,通过方法来描述一个属性.

    注意:

    1.方法参数只能有一个self

    2.方法上方要写@property

    3.调用的时候,我们不需要写括号.直接当成属性变量来用就可以了.

    4.这种套路只可以取值,不能设置值

    四.私有

    在python中,一般是不提倡设置和使用私有信息的.但有些场景,我们不得不这么做.

    在python中使用__作为方法或者变量的前缀,name这个方法或者变量就是私有的

    class Person:
        def __init__(self,laopo,mimi):
            self__laopo = laopo
            self__mimi = mimi
    
    alex = Person("wusir","他俩搞基")
    print(alex.__mimi)  #私有的,访问不到.报错

    程序报错,私有的内容是访问不到的,但是,这个访问不到是有一定的局限性的.比如:

    class Person:
        def __init__(self,laopo,mimi):
            self.__laopo = laopo
            self.__mimi = mimi
    
        def gaosuni(self):
            print("大喇叭开始广播了")
            return self.__mimi  #私有的内容,在类的内部,可以任意进行使用
    
    alex = Person("wusir","他俩搞基")
    mimi = alex.gaosuni()   # 通过一个非私有的方法,访问到了私有内容
    print(mimi)

    记住,私有的内容不能直接访问.但是如果对方开辟了外界访问的通道(公共方法).那可以通过这个公共的方法来获取私有的内容.

    这样做的好处是,外界只能看,凡是改不了.

    不单单实例变量有私有的,类变量(静态变量)一样拥有这样的属性.

    2.私有方法.

    私有方法,顾名思义,只能自己访问的方法,别人都不能随便调用的

    class Person:
        def __init__(self, name): # 构造, 创建对象的时候自动调用
            self.__name = name # 私有的
            print("这里是构造方法")
    
        def init(self):
            print("实例方法")
    
        def __chi(self): # 私有的
            print("我要吃. 疯狂的吃")
    
        def he(self):
            self.__chi() # 内部调用
            print("我是喝", self.__name)
    
    p = Person("孙艺珍")
    p.he()

     __chi是一个私有的方法,只能在类中自己调用,类外面不能访问.

    同样的.私有方法也是相对而言的,我们可以通过其他方法来访问到这样的方法.

    关于类方法和静态方法,和成员方法一样,

    需要注意的是,对于私有的内容而言.子类是无法继承的

  • 相关阅读:
    Spring
    sikuli常用方法学习
    运行测试Caused by: java.lang.UnsatisfiedLinkError: no attach in java.library.path错误解决
    sikuli+java实例
    sikuli运行出现问题:Win32Util.dll: Can't load 32-bit .dll on a AMD 64 bit platform
    官网下载jdk
    java:jdk环境变量配置+tomcat环境变量配置
    Redis能干啥?细看11种Web应用场景
    计数场景的优化
    国内外三个领域巨头告诉你Redis怎么用
  • 原文地址:https://www.cnblogs.com/af1y/p/9923277.html
Copyright © 2011-2022 走看看