zoukankan      html  css  js  c++  java
  • 面向对象二 成员

    本节主要内容:

    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属性是xxxx. 这种东西又被称之为成员变量或者实例变量量, 再或者被称之 为字段. 都是⼀个意思.

    二. 类的成员-变量

    1. 实例变量(字段)

    2. 类变量(静态变量)

    class Person:    # 类变量量, 表示所有的该类的对象都共享这个变量量.   

    country = "中国"      

    def __init__(self, name, num, birthday):        # 实例例变量量(字段) 表示你创建的每⼀一个⼈人都有这三个变量量       

    self.name = name       

    self.num = num       

    self.birthday = birthday

    p1 = Person("alex", 18, "1840年年06⽉月01⽇日")

    print(p1.name)        # alex print(p1.country)     #中国
    p2 = Person("wusir", 28, "1894年年07⽉月25⽇日")

    print(p2.name)        # wusir print(p2.country)     # 中国

    我们发现对象p1和p2的name都是对象⾃自⼰己的. 但是country是类的. ⼤大家公⽤用同⼀一个变量量. 如何来验证呢?

    Person.country = "⼤大清" # 在这⾥里里. 我把国家改成了了⼤大清

    p1 = Person("alex", 18, "1840年年06⽉月01⽇日")

    print(p1.name)

    print(p1.country)    # alex是⼤大清的
    p2 = Person("wusir", 28, "1894年年07⽉月25⽇日")

    print(p2.name)

    print(p2.country)    # wusir也是大清的

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

    二. 类的成员-方法

    class Computer:        # 实例方法(成员⽅方法)   

    def play(self):       

    print("我的电脑可以玩儿")

    c = Computer()

    c.play()    # 对象直接去调用实例方法

     静态方法. 静态方法不需要我们给方法传递self.  也就是说. 当出现⼀个方法不需要使用到 成员变量量的时候. 就可以选择使⽤用静态方法.  静态方法需要我们在⽅方法上⾯面添加⼀一 个@staticmethod

    类⽅方法. 类⽅方法和静态⽅方法差不多, 只不过类⽅方法需要在参数列列表中的第⼀一个位置预留留⼀一 个位置, 通常我们给第⼀一个参数起名字叫cls. 类⽅方法在被调⽤用的时候也不需要传递实例例对象. 但是. 系统会⾃自动的把类传递给第⼀一个参数.  类⽅方法在编写的时候, 需要在类⽅方法上⾯面添 加@classmethod

    三. 类的成员-属性

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

    class Person:   

    def __init__(self):       

    pass   

    @property   

    def age(self):       

    return 1  

    p = Person()

    age = p.age

    print(age)

     应⽤用场景: 我们⼀一般保存数据的时候, 不会保存⼀一个⼈人的年年龄. 因为随着时间的推移. 每个 ⼈人的年年龄都时刻在改变着. 那如何保存更更加完美呢? 很简单. 保存出⽣生年年⽉月⽇日. 然后⽤用程序来 计算,你当前的年年龄. 实时的. 那这个时候就需要进⾏行行相应的计算了了. ⽽而计算属于⼀一个功能. 当 然要写⽅方法⾥里里了了. 但是对于年年龄这个属性⽽而⾔言. 他应该是⼀一个数值. ⽽而不是动作. 所以python 就提供了了这样⼀一种机制. 通过⽅方法来描述⼀一个属性.    

    注意:         1. 方法参数只能有⼀一个self       

    2. 方法上⽅方要写@property       

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

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

    四. 私有

     在python中, ⼀一般是不提倡设置和使⽤用私有信息的. 但有些场景, 我们不得不这么做. 比如, 在⼀一个公司. 每个⼈人的收入情况, 这种内容是绝对不能公开的. 还有, 你的老婆, 也是⼀一个私有 的. 只能你⼀一个⼈人使⽤用. 别⼈人不能碰. 碰了了就炸锅了了.    

    在python中使⽤用__作为⽅方法或者变量量的前缀. 那么这个⽅方法或者变量量就是⼀一个私有的.

    1. 私有变量2. 私有方法

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


     
     

  • 相关阅读:
    【技能】Ext.Viewport 实现左三右一排列方式。
    Android之——短信的备份与还原
    草根做项目的经验分享一
    【转】每天一个linux命令目录
    【转】每天一个linux命令(61):wget命令
    【转】每天一个linux命令(60):scp命令
    【转】每天一个linux命令(59):rcp命令
    【转】每天一个linux命令(58):telnet命令
    【转】每天一个linux命令(57):ss命令
    【转】每天一个linux命令(56):netstat命令
  • 原文地址:https://www.cnblogs.com/DanielYang11/p/9922874.html
Copyright © 2011-2022 走看看