zoukankan      html  css  js  c++  java
  • 初識面向對象

    类属性与对象属性

    创建对象 也称之为实例化   产生的对象也称之为实例

    class Person:
        color = "black"
    
        def eat(self):
            print("黑人哥们正在吃饭....")
    p1 = Person()
    print(p1)
    print(p1.color)
    print(p1.__dict__)
    
    p2 = Person()
    print(p2)
    print(p2.color)
    print(p2.__dict__)
    
    #
    print(id(p1.color))
    print(id(p2.color))
    print(id(Person.color))

    当修改某一个对象的属性时 不会影响其他对象和类

    p2.color = "yellow"
    print(p2.color)
    print(p1.color)
    print(Person.color)
    
    Person.color = "red"
    print(p1.color)
    print(p2.color

    init方法的作用

    init 是初始化的缩写 用于为对象的属性设置初始值

    执行时机:当实例化产生对象时会自动执行该函数
        会自动传入需要初始化的对象
        初始化必须包含至少一个参数 用于表示对象本身
        该函数不允许有返回值

    class Dog:
                def __init__(self,age,name,**kwargs):
                    print("init run")
                    print(self)
                    self.age = age
    d = Dog(5,'agr')
    print(Dog.__init__)
    print(d)
    print(d.age)          self.name = name    

    绑定方法

    当使用类调用时,就是一个普通函数 有几个参数就得传几个参数

    当用对象来调用时,是一个绑定方法了,会自动将对象作为第一个参数传入

    一个类中可以有属性和方法

    方法分为两种

    1.绑定方法

    1.1对象绑定方法

    在使用对象调用时会自动传入对象本身

    class People:
        def __init__(self,name,age):
            self.name = name
            self.age = age
        def talk(self):
            pass
        
    p = People('xiaohua',18)
    print(p.talk)

    1.2类绑定方法

    @classmethod

    在使用对象调用时会自动传入类本身

    在使用类来调用时也会自动传入类本身

    单例模式中就会经常使用@classmethod

    lass People:
        @classmethod
        def talk(cls):
            pass
    
    p = People()
    print(People.talk)

    2.非绑定方法

    即不需要对象中的数据 也不需要类中的数据  那就定义为非绑定方法,就是普通函数

    @staticmethod

    import hashlib
    import time
    class MySQL:
        def __init__(self,host,port):
            self.id=self.create_id()
            self.host=host
            self.port=port
        @staticmethod
        def create_id(): #就是一个普通工具
            m=hashlib.md5(str(time.clock()).encode('utf-8'))
            return m.hexdigest()
    
    
    print(MySQL.create_id) #<function MySQL.create_id at 0x0000000001E6B9D8> #查看结果为普通函数
    conn=MySQL('127.0.0.1',3306)
    print(conn.create_id) #<function MySQL.create_id at 0x00000000026FB9D8> #查看结果为普通函数

     

     

     

     

     

  • 相关阅读:
    uva 10369 Arctic Network
    uvalive 5834 Genghis Khan The Conqueror
    uvalive 4848 Tour Belt
    uvalive 4960 Sensor Network
    codeforces 798c Mike And Gcd Problem
    codeforces 796c Bank Hacking
    codeforces 768c Jon Snow And His Favourite Number
    hdu 1114 Piggy-Bank
    poj 1276 Cash Machine
    bzoj 2423 最长公共子序列
  • 原文地址:https://www.cnblogs.com/duGD/p/10878716.html
Copyright © 2011-2022 走看看