类,对象 ,封装,实例变量,类变量,继承,多态

类:对一类事物的抽象。例如:人 ,狗,猫,鸟。。。这样是一大类的概括。讲人,可以指很多人,狗也可以分很多种狗

对象:具体的某个类的实例。就想 张三--》指的就是人这个类下面的具体的某一个实例。泰迪 就是狗这个类下面的某个实例

面向对象的三个特性:

  封装:就是将属性给封装起来,这个是你特有性质,你可以让外界知道,也可以不让外界知道

例如:

  

# Author:zylong
class Person:
    #人都有性别,姓名,身高,体重
    def __init__(self,name,sex,heigh,weigh,age):
        #这些属性可以直接被外界访问的
        self.name = name
        self.sex = sex
        self.heigh = heigh
        self.weigh = weigh
        #这些属性只有类提供方法,才能被访问
        self.__age = age
    def getAge(self):
        return self.__age

    #私有方法也是一样的,就是定义的时候以__开头,外界是不能直接方法的
#实例一个类

p1 = Person("张三","男",170,60,22)
#这就创建了一个张三的实例,这里要清楚 类实例的过程.属性和方法的区别
#封装:这时候就可以看出,将 姓名,性别,身高,体重,年纪 封装到p1中

#当我想知道p1这个人的age的时候
#print(p1.__age)#会提示没有这个属性,是因为这个属性不能直接被外界访问,只鞥通过类提供的getAge这个方法来获取
print(p1.getAge())#这样就获取到 年纪

类属性和实例属性:

#类属性和实例属性
class Dog:

    #这个就是类属性
    legNums = 4

    def __init__(self,sex,heigh,weigh,age):
        #这里面的就是实例属性
        self.sex = sex
        self.heigh = heigh
        self.weigh = weigh
        self.age = age

d1 = Dog("雄",50,30,3)
print(d1.legNums)#这里显示的是4
#如果d1想改变它的腿数
d1.legNums = 3
print(d1.legNums)#这样就变成了3
#这里要明白一点,这里改变的不是类变量的值,这里是给d1自己增加了一个属性,legNums = 3,。这里要清楚类实例的过程
#访问实例属性的时候,先访问自己的实例中是否有,如果没有再去类中找是否有,如果还没有就抛异常#如果类属性,是集合列表等,这里要明白,列表,集合等存储的方式。其实类中保存的是对列表的引用,其他地方改变列表的时候,类中的这个列表就会改变

继承

# Author:zylong
#这里要知道一点:
class Person:

    def __init__(self,name,age):
        #构造器,类通过这个来实例这个类。这个跟实例属性一样,如果本类有,就不会去找父类的,
        # 如果本类有__init__方法,就不会去找父类的,可以再这里自己调用父类的__init__方法
        pass

class WhitePerson(Person):

    def __init__(self,name,age):
        #通过这样的方式,python会自动搜素它的父类
        super(WhitePerson,self).__init__(name,age)

#python 2.x是 深度优先 3以后都是广度优先

多态:一种接口,多种实现

# Author:zylong
#python中多态--一个接口多种实现

class Person(object):

    def __init__(self,name,age):
        self.name = name
        self.age = age

    def objRun(obj):
        print("%s is run"%obj.name)
class WhitePerson(Person):
    pass

class BlackPerson(Person):
    pass

p1 = WhitePerson("zhang",20)
p2 = WhitePerson("yu",21)

Person.objRun(p1)
Person.objRun(p2)
时间: 2024-10-29 14:22:43

类,对象 ,封装,实例变量,类变量,继承,多态的相关文章

python—类对象和实例对象的区别

最近在对RF的通讯层的模块进行封装,需要将之前放在类似main里面的一个方法,如下所示:这段代码是开发提供,用于接口测试,模拟底层通讯,具体的通讯是在dll内,python这边只是做了个封装让RF进行调用.这段通讯层的代码实质上做了五件事: 第一:加载dll: 第二:初始化dll内的通讯参数: 第三:与服务器进行连接,创建session 第四:把数据senbuffer通过sessionManger发送给服务器 第五:取得的数据返回recibuffer def testlogin(ip,port,

组合,Mixin,类、类对象、实例对象

1.组合,将几个横向关系的组合在一起.所谓的组合就是将类的实例化放到新类里面,那么就将旧类组合进去了. class Turtle: def __init__(self, x): # 注意 init 前面必须双下划线 self.num = x class Fish: def __init__(self, x): self.num = x class Pool: def __init__(self, x, y): self.turtle = Turtle(x) # Pool类中实例化Turtle对象

能否向编译后得到的类中增加实例变量?能否向运行时创建的类中添加实例变量?为什么

不能向编译后得到的类中增加实例变量!能向运行时创建的类中添加实例变量! 因为编译后的类已经注册在runtime中,类结构体中的objc_ivar_list 实例变量的链表和instance_size实例变量的内存大小已经确定,同时runtime 会调用class_setIvarLayout 或 class_setWeakIvarLayout来处理strong weak引用,所以不能向存在的类中添加实例变量. 运行时创建的类是可以添加实例变量,调用 class_addIvar 函数,但是得在调用 

引用成员变量 和 类对象做成员变量

注意: 1. 引用成员变量 必须在构造函数的初始化列表中进行初始化 2. 引用成员变量 并不为这个变量新辟空间:类对象做成员变量则是要对其新辟一段空间的. 如下代码中,使用date1做参数初始化person_ref和person_obj.person_ref的birth字段date1为同一个地址空间,而person_obj的birth字段则是新辟了一段空间. #include <iostream> using namespace std; class Date { int month, yea

类,对象与实例变量

类就是一类事物,而对象就是一个事物,一类事物中包含若干的事物(而这其中的具体的事物就是对象),比如说:车,但没法具体到哪辆车,这就是一个类的概念,而如果说,我家的那辆轿车,就可以想到那具体的一辆车,而这个具体的车就是对象的概念. 类变量:比较特殊的实例变量,用static修饰的,一个类共用这个变量,所有由这类生成的对象都共用这个变量,类装载时就分配存储空间.一个对象修改了变量,则所以对象中这个变量的值都会发生改变. 实例变量:从属于类,由类生成对象时,才分配存储空间,各对象间的实例变量互不干扰,

iOS开发中 类、对象、实例变量、成员变量、属性变量等区别和关系

类(class):具有相同属性和行为等同一类元素等总称,类是一个抽象的概念. 区分是类还是对象,看它能否继续被细分. 在OC中,类是表示对象类型的结构体,对象通过类来获取自身的各种信息.类由两个部分组成:*.h和*.m文件组成. *.m文件中 implemention部分是类的实现部分,内部包含类中的各种信息,包括各种实例方法或类方法. 类别( category):是为现有的类添加新方法的方式,通常以"类名称+类别名称"来命名. 类别中不能添加新的实例变量.但是可以在类别中添加属性.

4 什么是类、对象、实例变量、方法

面向对象编程中,一般OC程序由三个文件组成:.h文件     .m文件     main.m文件.编译时,Xcode是编译所有.m上文件的. .h文件:这是一个头文件,也可以说是接口部分.实例变量(类的属性).对象方法.类方法的声明都在这个文件中. 如果定义一个“人”类, Person.h @interface Person : NSObject //人的属性(实例变量) { NSString *_name; //姓名 int _age; //年龄 } //对象方法的声明(行为) - (void

面向对象的成员: 实例变量 类变量 实例方法 类方法 静态方法 属性 私有

成员: 在类里面能写的所有内容都是类的成员 在上?代码中__init__和method都属于类的成员方法.  ?称为实例?法.  总之这样的东西 需要?对象来访问.  ?上方的self.属性1 = 参数1 这个代码的含义是给对象设置属性信息. 含义是这个对象的xxx属性是xxxx. 这种东西?被称之为成员变量或者实例变量, 再或者被称之 为字段. 都是一个意思 变量: 1.实例变量;由对象去访问的变量(字段) 2.类变量:此时,这个变量属于类的,但是对象也可以去访问(静态变量)   先说什么是实

Java访问子类对象的实例变量

对于Java这正语言来说,一般来说,子类可以调用父类中的非private变量,但在一些特殊情况下, Java语言可以通过父类调用子类的变量 具体的还是请按下面的例子吧! package com.yonyou.test; /** * 测试类 * @author 小浩 * @创建日期 2015-3-2 */ class Base { // 定义了一个名为i的实例变量 private int i = 2; public Base() { this.display(); //注意这里面的this代表当前

3.ruby语法基础,全部变量,实例变量,类变量,局部变量的使用和注意的要点

1.ruby的全局变量的概念和Java的全局变量的概念不同, ruby的全局变量是以$符号开头的,如果给全局变量的初始化值为nil会出现警告. 赋值给全局变量,这是ruby不推荐的,这样会使程序变得很难理解. 举例: #!/usr/bin/ruby $global_variable = 10 class Class1 def print_global puts "Global variable in Class1 is #$global_variable" end end class