面向对象二 成员

本节主要内容:

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. 私有方法

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


 
 

猜你喜欢

转载自www.cnblogs.com/DanielYang11/p/9922874.html