资讯专栏INFORMATION COLUMN

python类和对象

Raaabbit / 3346人阅读

摘要:类的定义相当于的构造函数方法相当于的方法创建了对象,会自动的调用方法被调用被调用被调用魔法方法在中,所有的以双下划线包起来的方法,都被统称为魔法方法。所谓多态定义时的类型和运行时的类型不一样,此时就成为多态。

class 类的定义
class Cat(object):
    def __init__(self,name,age): # 相当于Java的构造函数
        self.name=name
        self.age=age
        print("__init__方法")
    
    def __str__(self):  # 相当于Java的toString方法
        pass
    
    def eat(self):
        print("eat......")
        
    def drink(self):
        print("drink......")

tom=Cat("jack",10) # 创建了tom对象,python会自动的调用__init__()方法

__del__():
class Cat(object):
    """docstring for test"""
    def __init__(self,name,age):
        self.name=name
        self.age=age
        print("__init__被调用")

    def __del__(self):
        print("__del__")

tom=Cat("name",12)
del tom
print("=" * 30)
Out:
__init__被调用
__del__
==============================

tom=Cat("name",12)
print("=" * 30)
Out:
__init__被调用
==============================
__del__
魔法方法

在python中,所有的以"__"双下划线包起来的方法,都被统称为"魔法方法"。例如上述的__init____str__

魔法方法参考

私有属性和方法

Python中没有像Java中有public和private这些关键字来区别公有属性和私有属性

Python是以属性命名方式来区分,如果在属性名前面加了2个下划线"__",则表明该属性是私有属性,否则为公有属性(方法也是一样,方法名前面加了2个下划线的话表示该方法是私有的,否则为公有的)。

继承
class Animal:
    def eat(self):
        print("-----吃----")
    def run(self):
        print("-----跑----")

class Dog(Animal):     # python继承关键 
    def bark(self):
        print("----汪汪叫---")
    def run(self):        # 重写
        super().run()   # 调用被重写的父类的方法

dog = Dog()
dog.eat()

上述介绍的私有属性和方法不能被继承。

多继承

class Base(object):
    def test(self):
        print("----Base")

class A(Base):
    def test1(self):
        print("-----test1")

class B(Base):
    def test2(self):
        print("-----test2")

class C(A,B):    # 多继承
    pass

c = C()
c.test1()
c.test2()
c.test()

注意如果父类拥有同名的方法,子类会调用哪个方法:

class Base(object):
    def test(self):
        print("----Base")

class A(Base):
    def test(self):
        print("-----A")

class B(Base):
    def test(self):
        print("-----B")

class C(A,B):
    pass
    #def test(self):
    #    print("-----C")


c = C()
c.test() # -----A

print(C.__mro__) # (, , , , ) 如果有同名方法,会按这个顺序执行。其中, 这个顺序与class C(A,B)这个顺序有关。
多态

多态的概念是应用于Java和C#这一类强类型语言中,而Python崇尚“鸭子类型”。

所谓多态:定义时的类型和运行时的类型不一样,此时就成为多态。

class Dog(object):
    def print_self(self):
        print("大家好,我是dog,...")

class xiaogou(Dog):
    def print_self(self):
        print("hello ,我是xiaogou")


def introduce(temp):
    temp.print_self()


dog1 = Dog()
dog2 = xiaogou()

introduce(dog1)
introduce(dog2)
类属性、实例属性
class Tool(object):

    #类属性
    num = 0

    #方法
    def __init__(self, new_name):
        #实例属性
        self.name = new_name
        #对类属性+=1
        Tool.num += 1


tool1 = Tool("t1")
tool2 = Tool("t2")
tool3 = Tool("t3")

print(Tool.num)

静态方法、类方法

class Game(object):

    #类属性
    num = 0

    #实例方法 操作实例属性
    def __init__(self):
        #实例属性
        self.name = "laowang"

    #类方法  操作类属性
    @classmethod
    def add_num(cls):
        cls.num = 100

    #静态方法  不操作类属性和实例属性
    @staticmethod
    def print_menu():
        print("----------------------")

game = Game()
#Game.add_num()#可以通过类的名字调用类方法
game.add_num()#可以通过这个类创建出来的对象调用这个类方法
print(Game.num)

#Game.print_menu()#通过类调用静态方法
game.print_menu()#通过实例对象调用静态方法
单例模式
class Car(object):
    __instance=None

    def __init__(self):
        pass

    def __new__(cls):
        if not cls.__instance:
            cls.__instance=object.__new__(cls)

        return cls.__instance


c1=Car()
c2=Car()

print(id(c1))
print(id(c2)) #相等

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41480.html

相关文章

  • SICP Python 描述 2.6 实现类和对象

    摘要:以这种方式实现对象系统的目的是展示使用对象隐喻并不需要特殊的编程语言。我们的实现并不遵循类型系统的明确规定。反之,它为实现对象隐喻的核心功能而设计。是分发字典,它响应消息和。 2.6 实现类和对象 来源:2.6 Implementing Classes and Objects 译者:飞龙 协议:CC BY-NC-SA 4.0 在使用面向对象编程范式时,我们使用对象隐喻来指导程序...

    chenjiang3 评论0 收藏0
  • Python面向对象编程 - 类和实例

    摘要:一面向对象编程。是一门面向对象的编程语言,通过对象实现对方法的调用。面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。对于面向对象语言,重要的概念是类和实例。 一、preface 面向对象编程OOP:object oriented programming。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。Python是一门面向对象的编程语言,...

    Elle 评论0 收藏0
  • 由type()函数对类和实例使用结果差异而引出的一个问题

    摘要:但是随后有人提出反对意见并说这个是随后搜索到这篇文章深刻理解中的元类里面介绍了如何使用函数创建一个类,并解释了属性。 有如下代码 #-*-coding:utf-8-*- class a(): pass a1 = a() print(type(a),type(a1)) 两个python版本分别为Python2.7.11Python3.5.1 在python2中得到的结果(, )a...

    zhangwang 评论0 收藏0
  • python 类和元类(metaclass)的理解和简单运用

    摘要:什么是元类刚才说了,元类就是创建类的类。类上面的属性,相信愿意了解元类细节的盆友,都肯定见过这个东西,而且为之好奇。使用了这个魔法方法就意味着就会用指定的元类来创建类了。深刻理解中的元类 (一) python中的类 今天看到一篇好文,然后结合自己的情况总结一波。这里讨论的python类,都基于python2.7x以及继承于object的新式类进行讨论。 首先在python中,所有东西都...

    zhangqh 评论0 收藏0
  • python学习笔记-类和实例

    摘要:面向对象最重要的概念应该就是类和实例了。记得以前学习的时候,有一个比较简单的例子来解释类和实例。构造函数类中可以定义一个构造函数。构造函数的意思就是类在创建的时候会执行的函数。在实例中通过构造函数添加的或者在类外动态添加的属性可以。 面向对象最重要的概念应该就是类(class)和实例(instance)了。记得以前学习java的时候,有一个比较简单的例子来解释类和实例。在汽车制造过程中...

    Richard_Gao 评论0 收藏0

发表评论

0条评论

Raaabbit

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<