Python知识4 类与对象【多测师】

一、类与对象、实例化的概念
1.Python中实例变量:定义在方法中的变量,只作用于当前实例的类。这个和Java不同
Java中实例变量的作用于全局变量,但是只能被对象调用。
2.实例化:创建一个类的实例,类的具体对象
3.类实例化后,可使用其属性,可以通过类名访问属性
4.类对象支持俩种操作:属性引用和实例化

二、类创建和调用
1.调用类的属性和对象的方法
class MyClass:
    i=123
    def n(self):
        return 'haha'

x=MyClass()

print(x.i) //调用类的属性
print(x.n())  //实例化对象之后调用方法

三、Python的构造方法
def __init__(self):   //初始化的实例对象
    self.data=[]
Python中self的含义:
1.这里指自己,实例instance本身
2.此处的self是个对象 object 是当前类的实例
3.函数也叫方法
4.其实这里的self和Java中的this差不多
5.类方法必须包含参数self,且为第一个参数,self代表的是类的实例
6.学习网址:https://www.crifan.com/summary_the_meaning_of_self_and___init___in_python_and_why_need_them/

四、函数的第一个参数self和Class函数中访问对应的变量(读取和写入)和调用对应函数
1.访问对应的变量self.valueName
2.调用对应的函数self.function()  调用函数函数名后面都有小括号()
3.Python中约定俗成,函数的第一个参数必须为实例对象本身名字写成self
4.代码演示如果没有在类Class的最初的_init_函数中,正确的初始化实例变量,会导致后续没有变量可用,会出现AttributeError错误

从上述代码可见,由于在类的初始化(实例化)的__init__函数中,没有给self.name设置值,使得实例中,根本没有name这个变量,导致后续再去访问self.name,就会出现AttributeError的错误了。
对应的,如果写成self.name,则意思就正确了,就是初始化的时候,给实例中新增加,并且正常设置了正确的值newPersionName了,所以后续再去通过self.name,就可以访问到,当前实例中正确的变量name了。
正确的代码如下:

在函数中,使用对应的变量,虽然代码是可以运行的,但是实际上却是使用的,不是实例中的变量 有时候,虽然你写的代码,可以运行,但是使用到的变量,由于没有加self,实际上是用到的不是实例的变量,而是其他的变量。
此类问题,主要和Python中的变量的作用域有关,但是此处例子中,也和是否使用self有关:

际上其中,可见,此处开始__init__中,没有给self实例初始化对应的name,而后面的函数sayYourName中,虽然可以调用到self.name而没有出现AttributeError错误,但是实际上此处的值,不是所期望的,传入的name,即"crifan",而是类中的name的值,即"class global name”。

五、Python中为什么要有_init_
1.支持带参数的类的初始化 对应Class初始化时 可以运行传递不同的参数

其中,就是针对Person这个类
不同的示例,在初始化的时候,都传递一个对应的参数,这样不同的Person,就都有了自己的不同的名字了。
这个,至少看起来,有点类似于,其他语言中的,传递特定参数去对类进行初始化。
实现类本身相关内容的初始化
当一个Class,稍微复杂一点的时候,或者内部函数需要用得到的时候,往往都需要在,别人实例化你这个类之前,使用你这个类之前,做一些基本的,与自己的类有关的,初始化方面的工作,而这部分工作,往往就放到__init__函数中去了。
换句话说,你要用人家的类(中的变量和函数)之前,总要给人家一个机会,做点准备工作,然后才能为你服务吧。
演示代码就不用了,因为上面的代码,也可以算是这方面的例子了,不同的人,应该有不同的名字,而给不同的人设置不同的名字,也是需要在调用sayYourName之前,就先初始化好的。

六、类的方法
在类的内部用def关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数self且为第一个参数,self代表的是类的实例
代码如下:
# 类定义
class people:
    # 定义基本属性
    name = ''
    age = 0
    # 定义私有属性,私有属性在类外部无法直接进行访问
    __weight = 0

    # 定义构造方法
    def __init__(self, n, a, w):
        self.name = n
        self.age = a
        self.__weight = w

    def speak(self):
        print("%s 说: 我 %d 岁。" % (self.name, self.age))

# 实例化类
p = people('xiaoshu', 10, 30)
p.speak()

一、self是什么东西?
OOP  面向对象编程
OOD  面向对象设计
OOA  面向对象分析
Python的self 就等于C++的this的指针
类是图纸 由类实例化后的对象才是真正可以住人的房子 
可以根据图纸可以生产成千上万的房子 self就是门牌号
类生产很多对象 
class Ball:
    def setName(self,name):
        self.name = name

    def kick(self):
        print("我叫%s,该死的,谁踢我..."%self.name)

a=Ball()
a.setName('球A')
b=Ball()
b.setName('土豆')

a.kick()
b.kick()

运行结果:
我叫球A,该死的,谁踢我...
我叫土豆,该死的,谁踢我…

二、构造方法
1._init_(self) 只要实例化一个对象 那么这个方法就会在对象创建的时候自动被调用
2.实例化对象可以传入参数 重写这个init方法来进行初始化操作
3.实例代码如下:
class Ball:
    def __init__(self,name):
        self.name = name

    def kick(self):
        print("我叫%s,该死的,谁踢我..." % self.name)

a=Ball('球A')
a.kick()
b=Ball()  //这个就会报错需要传入name参数

三、公有被私有
1.苍井空是世界的 老婆是自己的
2.Python的属性和方法都是公有的
class Person:
    name ='我是帅的'
p = Person()
p.name

3.在Python中定义私有变量只需要在变量名或函数名前加上 __双下划线name这个函数或变量就会变为私有的了4.私有变量
class Person:
    __name ='我是帅的'
    def getName(self):
        return self.__name
p = Person()
p.__name //这个是访问不到的
p.getName() //只能通过这个内部的方法调用
p._Person__name //这个可以调用、因为Python的私用机制是的概念其实是伪私有的
Python的类是没有权限控制的 变量是可以被外部调用的
原文地址:https://www.cnblogs.com/xiaoshubass/p/13113901.html