python的面向对象编程-类和对象

1.

# 对象的奥义在于,他本身是讲程序整合(就是把一个个功能进行分区,这样就可以任意的调用了!!)
# python的类中不仅可以有定义函数和变量,也可以包括其他任何的代码!!

class student:
    name = "zhangsan"
    def func01(self):
        print("水墨画")
    print(123)
    for i in range(10):
        print(i,end=" ")

# 由此可见,类体的代码在其定义的阶段就会执行(主要是除了函数和变量外的其他的代码)

2.

函数里面的变量要想访问函数体之外的成员变量,那么就必须加上self.变量名的形式才可以,不加self,只有变量名字只会访问局部变量,如果该局部变量没有被定义,就会报错!!!

class student:
    name = "zhangsan"#类的数据类型(成员变量)
    def func01(self):#self代表正在调用该函数的对象
        name = "lisi"
        print(name)#局部变量name,这个局部变量是不会访问def函数之外的变量的
        print(self.name)#成员变量name
        print(student.name)#成员变量name
student().func01()#创建个匿名的对象!

3.构造方法,和变量的访问。

class student:
    name = "zhangsan"
    def __init__(self):#这是个构造方法,这种方法的优点在于可以在对象构造的时候就会立刻执行。
        # self.name = "wangwu"#类变量已经有的变量会覆盖原来的变量值
        self.age = 18#类变量中之前没有声明的变量,会进行创建,不过,如果这个变量的创建不是在
# 构造方法里面的话,实在一个普通的实例方法的里面,那么那个对象调用这个函数,那么这个变量就会成为这个对象的私有方法
    def func01(self):
        print(self.name)
        print(self.age)
        # print(student.age)#报错,对象的数据是不会共享给类的
student().func01()#通过函数访问变量
print(student.name)#通过.的形式进行访问对象

# 总结:
# 1.self指代的变量是这个正在调用的对象的变量,
# 这个对象独有的变量是不会共享给类的,但是类的成员变量, 这个对象是可以访问的

所以student.nameself.name的区别在与,前者不可以访问后者的name,但是后者可以访问前者的name。
# 2.构造方法内可以存放除了对象功能的任何的代码,只要想创建对象后立即执行的都可以
# 而且构造方法可以调用类中的任何函数。构造方法的返回值是none

4.类和对象的共享关系

class student:
    name = "zce"
    count = 0
    def __init__(self):
         student.count = student.count+1#这样可以统计这个对象创建的次数
# 类的数据是共享给所有的对象的
stu01 = student()
stu02 = student()
stu03 = student()
stu01.name ="kb"#只会改变stu01的name
student.name ="ece"#即便类的变量发生改变,那么已经改变的对象的变量也不会改变
print(stu01.name)#相当于self.name,名称空间作用域的问题
print(stu02.name)
print(stu03.name)
print(student.name)

5.

class A:
    x = 100 #x是友好的
    def __init__(self, value1=0, value2=0):
        #__init__相当于java里的构造函数
        #self指的是正在调用函数的对象,相当于java里的this
        self._value1 = value1    #保护成员
        self.__value2 = value2   #私有成员
        self.value = value1 + value2
    def setValue(self, value1, value2):
        self._value1 = value1
        self.__value2 = value2
    def show(self):
        print(self._value1,self.value,self.__value2)
a = A() #创建类的新实例并将此对象分配给局部变量a
#构造方法中的是关键字形参,那么再给构造方法传值的时候,可传可不传
a.setValue(2,5)
a.show()
print(a._value1)   #访问保护变量
print(a._A__value2)#访问私有变量
print(a.x)#访问友好类型的变量

Python中,约定:
_xxx:受保护成员;一般建议类对象和子类对象访问,不建议通过对象直接访问
__xxx__:系统定义的特殊成员;
__xxx:私有成员,只有类对象自己能访问,子类对象不能直接访问到这个成员,但在对象外部可以通过“对象名._类名__xxx”这样的特殊方式来访问。
注意:Python中不存在严格意义上的私有成员。
数据成员可以大致分为两类:属于对象的数据成员和属于类的数据成员。
属于对象的数据成员一般在构造方法__init__()中定义,当然也可以在其他成员方法中定义,在定义和在实例方法中访问数据成员时以self作为前缀,同一个类的不同对象(实例)的数据成员之间互不影响;
属于类的数据成员是该类所有对象共享的,不属于任何一个对象,在定义类时这类数据成员一般不在任何一个成员方法的定义中。
如果同样的属性名称同时出现在实例和类中,则属性查找会优先选择实例

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值