栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

学习python基础(五)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

学习python基础(五)

面向对象
  • 面向过程关注点:怎么做
  • 面向对象关注点:谁来做

类名:采用大驼峰命名法

实例方法:定义在类的内部,类方法中第一个参数必须为self——默认传实例对象本身

  • 定义在类里面,方法外面的属性:类属性
  • 定义在方法里面使用self引用的属性:实例属性

init()
初始化方法,实例化对象的时候自动调用,完成一些初始化设置

  1. python自带的内置函数
  2. 用双下划线包起来[魔术函数]
class People:
    def __init__(self,name,sex,age):
        '''
        实例属性的声明
        '''
        self.name = name
        self.sex = sex
        self.age = age

    def eat(self,food):
        print("{}喜欢吃{}".format(self.name,food))

xiaoming = People("小明","女",13)
print("姓名:{},性别:{},年龄:{}".format(xiaoming.name,xiaoming.sex,xiaoming.age))
xiaoming.eat("苹果")
魔法方法

是python中的一些内置好的特定方法,方法名为__xx__,在进行特定操作时被调用。

__init__方法:初始化一个类,在创建实例对象为其赋值时使用。
__str__方法:将对象转成字符串测试的时候使用。
__new__方法:创建并返回一个实例对象,调用了一次,就会得到一个对象。
__class__方法:获得已知对象的类。
__del__方法:对象在程序结束后对对象销毁时调用,来释放资源。

class Animal:
    def __init__(self,name,color):
        self.name = name
        self.color = color
        print("init函数执行啦")

    def __str__(self):
        '''
        打印对象,自定义对象内容格式
        :return:
        '''
        return ("我的名字是:%s,我的颜色是:%s"%(self.name,self.color))

    def __new__(cls, *args, **kwargs):
        '''
        创建对象实例的方法,每调用一次,就会生成一个新的对象
        经常在单例模式时使用
        :param args:
        :param kwargs:
        '''
        print("new函数执行啦")
        return object.__new__(cls)

dog = Animal("旺财","白色")
print(dog)
析构方法

当一个对象被删除或者被销毁时,python解释器会默认调用__del__()方法,也称为析构方法
程序结束时,自动调用__del__方法
对象被删除时,也会自动调用__del__方法

OOP的三大特征
  • 封装
  • 继承
  • 多态

单继承

class Animal:
    def eat(self):
        print("吃")
        pass

    def drink(self):
        print("喝")
        pass


class Cat(Animal):
    def jiao(self):
        print("喵喵叫")


class Dog(Animal):
    def jiao(self):
        print("汪汪叫")


cat = Cat()
cat.eat()

多继承

class shenxian:
    def fly(self):
        print("神仙会飞")


class houzi:
    def eat(self):
        print("猴子喜欢吃桃")


class MonkeyKing(shenxian, houzi):
    pass


monkey = MonkeyKing()
monkey.eat()
monkey.fly()

间接继承

class GrandFather:
    def eat(self):
        print("吃")


class Father(GrandFather):
    pass


class Son(Father):
    pass


son = Son()
son.eat()
print(Son.__mro__) #查找顺序

重写:子类有和父类相同的方法,子类中的方法会覆盖父类的方法
多态:同一种行为对于不同的子类,有不同的表现形式

class Animal:
    def say_who(self):
        print("我是一个动物...")
        pass

    pass


class Duck(Animal):
    def say_who(self):
        print("我是一个鸭子...")
        pass

    pass


class Dog(Animal):
    def say_who(self):
        print("我是一只小狗")
        pass

    pass


def commonInoke(obj):
    obj.say_who()
    pass


# duck = Duck()
# duck.say_who()
# dog = Dog()
# dog.say_who()

listObj = [Dog(), Duck()]
for item in listObj:
    commonInoke(item)

class Student:
    name = "李明"

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


lm = Student(18)
print(lm.name)
print(lm.age)
print(Student.name)

不可以通过实例对象对类属性进行修改
只能通过类对象对类属性进行修改

类方法:类对象所拥有的方法,需要用装饰器@classmethod修饰,类方法第一个参数是类对象cls,可以通过类对象或实例对象调用

class People:
    country = "China"
    #类方法
    @classmethod
    def get_country(cls):
        return cls.country
    #通过类方法可以修改类属性
    @classmethod
    def change_country(cls,data):
        cls.country = data
    pass

print(People.get_country())
people = People()
print(people.get_country())
people.change_country("英国")
print(People.get_country())

静态方法也是类对象所拥有的方法,用@staticmethod修饰,且不需要任何参数

一般情况下,不会通过实例对象访问静态方法。
在静态方法中,一般不会涉及类方法和属性的使用

import time
class Timer:

    @staticmethod
    def showTime():
        return time.strftime("%H:%M:%S",time.localtime())


print(Timer.showTime())

私有属性:__开头,不能在类的外部被直接使用或访问
类的外部:包括由类实例化的对象,继承的类

子类不能继承父类的私有化属性

class Person:
    __hobby = "跳舞"
    def __init__(self):
        self.__name = "李四"
        self.__age = 30
        pass

    def __str__(self):
        return '{}的年龄是{},爱好是{}'.format(self.__name, self.__age,Person.__hobby)

    def setHobby(self,hobby):
        Person.__hobby = hobby

class Student(Person):
    pass


xl = Person()
print(xl)
student = Student()
student.setHobby("唱歌")
print(student)




私有化方法,在方法名前加__,在类的内部调用,子类不能继承,外部不能调用

  • _xxx,前面加一个下划线,表示是protected类型的变量,只允许本身或子类访问,不能使用from import * 进行导入
  • xx,前后两个下划线,魔法方法
  • xxx_,后面单下划线,避免属性名与python关键字冲突

property

class Person(object):
    def __init__(self):
        self.__age = 18

    # def get_age(self):
    #     return self.__age
    #
    # def set_age(self,age):
    #     if age < 0:
    #         print("年龄不能小于零")
    #     else:
    #         self.__age = age
    #
    # age = property(get_age,set_age)

    # 通过装饰器的方式声明
    @property #提供get方法
    def age(self):
        return self.__age
    @age.setter
    def age(self,age):
        self.__age = age

p1 = Person()
print(p1.age)
p1.age = 25
print(p1.age)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1012685.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号