python:类1——类和对象基础

一、OO = Object Oriented 面向对象  

OOP面向对象编程、OOA面向对象分析、OOD面向对象设计

 

二、属性+方法——>类(数据和函数)

class Turtle():   #类名约定用大写
    #属性
    color = 

    #方法
    def climb(self):
        pass
    def run(self):
        pass

tt = Turtle()    #创建对象
tt.run()    #调用

class Myclass(list):继承list
  pass
list2 = Myclass()
list2.append(4)
list2.append(3)
list2.sort()

class A:
  def fun(self):
    print('I am A')
class B:
  def fun(self):
    print('I am B')
a = A()
b = B()
a.fun()
b.fun()#名字一样,打印不一样,就是多态

OOP三大特征:

封装:信息隐蔽技术

继承:子类自动共享父类之间数 据和方法的机制

多态:不同对象对同一方法响应不同的行动

 

三、self是什么?相当于c++的this指针!

由一个类可以生成无数个对象,当一个对象的方法被调用的时候,对象会把自身作为第一个参数传给self参数,Python就知道是哪个对象在调用方法了。例如:

class Ball():
    def setName(self, name):
        self.name = name
    def kick(self):
        print("我叫%s,谁踢我。。。" % self.name)

a = Ball()
a.setName('qiu A')
b = Ball()
b.setName('qiu B')
a.kick()
b.kick()    #a对象和b对象个返回个的,正是因为self的帮助

 

四、Python的魔法方法(被双下滑线包围)

__init__(self)构造方法,用于实例化对象传入参数

上边两个例子没有显性声明构造方法,试用默认的无惨__init__()

#coding:utf8
class Ball:
        def __init__(self, name):
                self.name = name
        def kick(self):
                print("I am %s, 该死的,谁踢我" % self.name)

a = Ball('土豆')
a.kick()
c = Ball() #报错

 

五、公有和私有

公有变量可以通过点操作符访问

私有变量(名字改编"_类名__变量名"name mangling技术)只需在变量名或函数名前加上“__”两个下划线!此时点name或者点__name都不能访问到(报错),试用getName()

#coding:utf8
class Person:
        __name = "liyi"
        def getName(self):      #通过方法访问
                return self.__name

p = Person()
#p.name  报错
#p.__name 报错
p.getName()
p._Person__name              #会访问到liyi

 私有方法也是加两个下划线

python:类5——Python 的类的下划线命名有什么不同?

 

六、继承

1、如果子类中定义与父类同名的方法或属性,则会自动覆盖父类对应的方法或属性

#coding:utf8
class Parent:
        def hello(self):
                print('父类方法hello')
        def func(self):
                print('父类方法func')
class Child(Parent):
        def func(self):
                print('子类方法func,覆盖了父类方法')

p = Child()
p.hello()
p.func()


[root@CentOS6 ~]# python test.py 
父类方法hello
子类方法func,覆盖了父类方法

2、supper()方法

(技术一:调用未绑定的父类方法)调用父类的构造方法(父类点init方法,注意self参数),
                此处的self不是分类的实例对象,而是子类Shark的实例对象,相当于Fish.__init__(Shark),因为被重写了。
(技术二:使用supper函数<更好>):supper函数能自动找到需要的基类的方法,而且还会为我们自动传入self参数
                supper().__init__(),不用给出基类的名字,会自动把所有父类、父父类的方法;所以修改基类名字时,不用一一修改
#coding:utf8
import random as r
class Fish:
def __init__(self):
                self.x = r.randint(0, 10)
                self.y = r.randint(0, 10)
        def move(self):
                self.x -= 1
                print("我的位置是:", self.x, self.y)

class Goldfish(Fish):
        pass
class Carp(Fish):
        pass
class Salmon(Fish):
        pass
class Shark(Fish):            #定义鲨鱼,除了位置属性还要有个是否饥饿的属性
        def __init__(self):       #重写就会覆盖
          Fish.__init__(self)   #(技术一:调用未绑定的父类方法)
                       (技术二:使用supper函数<更好>)
                self.hungry = True
        def eat(self):
                if self.hungry:
                        print("吃货的梦想就是天天有的吃")
                        self.hungry = False
                else:
                        print("太撑了,吃不下了")

g = Goldfish()
s = Shark()
s.eat()
g.move()

3、多重继承:会使语法混乱,尽量不用

class Base1:
    pass
class Base2:
    pass
class C(Base1, Base2):
    pass

 

七、组合类:把类的实例化放到新类里边(横向关系,继承是纵向关系)

#coding:utf8
把鱼类对象和乌龟类对象放到水池类中
class Turtle:
        def __init__(self, x):
                self.num = x
class Fish:
        def __init__(self, x):
                self.num = x
class Pool:
        def __init__(delf, x, y):  #传入x个乌龟y个鱼
                self.turtle = Turtle(x)
                self.fish = Fish(y)
        def print_num(self):
                print("水池总共有乌龟%d只,小鱼%d条" % (self.turtle.num, self.fish.num)  #这里self.turtle是不对的,必须是self.turtle.num

 

八、Mix-in机制(鱼c扩展)

pass

 

九、类、类对象、实例对象:是三个不同的东西!

#coding:utf8
class C:    #类
        count = 0
a = C()
b = C()
a.count     #实例对象的count
C.count     #类对象的count
a.count = 10  #a.count返回10  b.count返回0  C.count返回0
C.count = 100   #a.count返回10(因为上一步已经覆盖,看不到上一层) b.count返回100(未覆盖,看到上一层)  C.count返回100
对实例对象赋值后,会覆盖掉类对象,而看不到类对象

下边的会覆盖上边的!

 

十、属性和方法相同,属性会把方法覆盖掉!  

  属性名用名词,方法名用动词

 


扩展:Python绑定概念

Python严格要求方法需要有实例才能被调用,这种限制其实就是Python所谓的绑定概念。所以需要在方法定义时加上self

 

bb.__dict__查看实例所拥有的属性

BB.__dict__查看类所拥有的的属性,可以看到方法,会有好多东西,用来跟踪与类相关的值。实例对象会共用,但会被实例属性覆盖;以dict键值对返回

删除类对象后,实例对象(static静态的)依然存在在内存中,只有当程序退出时才会释放。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 面向对象的程序设计分为两种,一种是基于类的,另一种是基于原型的。其中基于类的程序设计是最常见的一种,它主要涉及到两个概念,即类和对象。类是一个抽象的概念,它描述了一类具有相同属性和方法的对象,而对象则是具体的实例。在基于类的程序设计中,类用于描述对象的属性和方法,而对象则是类的具体实现。因此,基于类的程序设计更注重对象的封装、继承和多态等概念。 ### 回答2: 面向对象编程是一种程序设计范式,它把程序看作是一组对象的集合,每个对象都有一个特定的属性和方法。在Python中,每个对象都是一个类的实例,类是一个抽象的概念,用于表示一组相似的对象对象是类的实例,它继承了类的属性和方法,同时可以拥有自己的属性和方法。 在Python中,类定义的语法为: class ClassName: # 属性和方法 在类定义中,可以定义属性和方法,类的属性是一些数据,用来描述类的特征;类的方法是一些函数,用来描述类的行为。同时,类还可以继承其他类的属性和方法,通过继承,子类可以重用父类的代码,同时也可以增加自己的属性和方法。 在Python中,对象的创建和使用的语法为: object_name = ClassName() 在对象的创建过程中,会调用类的构造函数(__init__()方法),用来初始化对象的属性和方法。然后,可以使用对象的属性和方法来完成具体的任务。 在面向对象编程中,有三个重要的概念,分别是封装、继承和多态。封装是指把数据和行为包装在一个类中,对外部隐藏具体的实现细节;继承是指子类可以继承父类的属性和方法,在子类中可以重写父类的方法和添加自己的方法;多态是指同一个方法可以在不同的对象上产生不同的结果,通过实现多态,程序可以更加灵活和可扩展。 最后,在Python中,还可以通过__str__()方法来自定义对象的字符串表示方式,方便输出和调试。同时,还可以通过@property和@setter装饰器来实现属性的封装和保护。 总之,类和对象是面向对象编程的基础,它提供了一种更加灵活和可扩展的编程方式,同时也对程序的设计和架构提出了更高的要求。因此,熟练掌握类和对象的相关知识,是Python编程的基础和必备技能。 ### 回答3: Python中的面向对象编程(Object-Oriented Programming,OOP)是一种将数据和行为封装在一起,以创建对象为中心的思想。在Python中,一切皆为对象,从简单的数字、字符串到复杂的列表、元组都是对象。面向对象(Object-Oriented)编程中最基本的两个概念是类和对象。 类是一种数据类型,是一组相关数据和方法的描述。其实就是一个对象的模板,包含了它所描述的对象共有的属性和方法。Python中定义类的方法比较简单,使用关键字`class`即可,例如: ```python class Dog: def __init__(self, name, age): self.name = name self.age = age def bark(self): print("汪汪!") ``` 上述代码定义了一个Dog类,包含了Dog对象共有的属性(name和age)和方法(bark)。通过关键字`def`定义Dog类的方法,其中`__init__`方法是一个特殊的方法,用于初始化类的对象属性。 当我们需要使用Dog类时,需要将它实例化为一个对象。例如: ```python dog1 = Dog("小黑", 3) dog1.bark() # 输出:汪汪! ``` 上述代码创建了一个Dog对象,设置了它的name为“小黑”,age为3,然后调用了Dog类的方法bark。 另外,Python中还有一些内置函数,可以用于操作类和对象。例如: - `type`函数:用于返回对象的类型。使用方法为`type(object)` - `isinstance`函数:用于检查对象是否为指定类的实例。使用方法为`isinstance(object, classinfo)` - `hasattr`函数:用于检查对象是否具有指定的属性。使用方法为`hasattr(object, name)` - `getattr`函数:用于获取对象的属性值。使用方法为`getattr(object, name[, default])` - `setattr`函数:用于设置对象的属性值。使用方法为`setattr(object, name, value)` 以上是Python中定义类和使用类的基本语法和函数,掌握了这些知识后,可以尝试设计自己的类并应用到实际的编程项目中。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值