python类

类用法:定义类--->创建类的实例--->通过类的实例就可以访问类中的属性和方法

定义类:

class ClassName:
    """类的帮助信息"""
    statement            # 类体

#classname:用于指定类名
#类的帮助信息 :用于指定类的文档字符串。
#statement:类体,主要由类变量(或类成员)、方法和属性等定义语句组成。如果在定义类时,没有想好类的具体功能,也可以在类体中直接使用Pass语句代替。

创建类的实例:类是虚拟的,好比图纸,接下来用图纸创建事物,以创建类的实例,即实例化该类的对象。parameterlist 就是这个类别的对象。

ClassName(parameterlist)

def __init__(self):表示创建一个类的构造函数,所谓构造函数,就是在类的实例化时会自动执行的方法。在Python类定义时,有一些是比较特殊的方法,这种方法的方法名一般以双__开始和结尾,在Python类中有着特别的意义。基于此,我们一般在类中定义方法时,方法名最好不要以__开始。类一旦进行实例化后,就会执行__init__这个构造方法进行初始化,一般这里会进行属性的初始化绑定和一些其他初始化动作。(看成实例化函数

使用方法形式一:def init(self)

这种形式在__init__方法中,只有一个self,指的是实例的本身。它允许定义一个空的类对象,当新数据来时,可以直接添加。实例化时,需要实例化之后,再进行赋值。

# -*- coding:utf-8 -*-
class Student(object):
    def __init__(self):
        self.name = None
        self.grade = None

    def print_grade(self):
        print(f"{self.name}'s grade is {self.grade}")

s1 = Student()  # 创建对象s1
s1.name = "Tom"
s1.grade = 8

s2 = Student()  # 创建对象s2
s2.name = "Jerry"
s2.grade = 7

s1.print_grade()
s2.print_grade()

使用方法形式二:def init(self,args)

这种形式在__init__方法中,除了有参数self,还有其他的参数args。
这种形式在定义方法时,属性值不允许为空。实例化时,直接传入参数。

# -*- coding:utf-8 -*-
class Student(object):
    def __init__(self, name, grade):
        self.name = name
        self.grade = grade

    def print_grade(self):
        print(f"{self.name}'s grade is {self.grade}")


s1 = Student("Tom", 8)   # 创建对象s1
s2 = Student("Jerry", 7)  # 创建对象s2

s1.print_grade()
s2.print_grade()

self:调用这方法的对象。self接收的是类本身,包含了类所有的属性(定义)和方法(函数)

类属性: 这个类下所有的对象都可以共享这个类属性

对象属性:实例化后产生的属性(不能被继承)

class MyClass2:
    class_attr = 'ca'

    def __init__(self):
        self.obj_attr = 'oa'


mc = MyClass2()
print('通过对象访问类属性', mc.class_attr)
print('通过对象访问对象属性', mc.obj_attr)
print('通过类访问类属性', MyClass2.class_attr)
print('通过类访问对象属性', MyClass2.obj_attr)

面向对象编程:封装 继承 多态(从类实例化出来的对象具有这三个特征)

if __name__ == "__main__":
    myClass1 = MyClass()  #创建类的一个实例

封装:能继承公共方法和属性

继承:
实现代码的重用,子类拥有父类的所有属性与方法
class 类名(父类名):
    pass

子类可以拥有多个父类
class 子类名(父类名1, 父类名2 ...)  #注意继承顺序
    pass

多态:

多态指的是一类事物有多种形态,一个类有很多个子类,因而多态的概念是基于继承的

多态性:是指具有不同功能的函数可以使用相同的函数名,这样就可以用一个函数名调用不同内容的函数。在面向对象方法中一般是这样表述多态性:向不同的对象发送同一条消息,不同的对象在接收时会产生不同的行为(即方法)。也就是说,每个对象可以用自己的方式去响应共同的消息。所谓消息,就是调用函数,不同的行为就是指不同的实现,即执行不同的函数。

# 动物有多种形态:人类、猪、狗
class Animal:
    def run(self):  # 子类约定俗称的必须实现这个方法
        raise AttributeError('子类必须实现这个方法')


class People(Animal):
    def run(self):
        print('人正在走')


class Pig(Animal):
    def run(self):
        print('pig is walking')


class Dog(Animal):
    def run(self):
        print('dog is running')


peo1 = People()
pig1 = Pig()
d1 = Dog()

peo1.run()
pig1.run()
d1.run()

类属性只能通过类属性来修改,不能通过对象属性来修改。

class User():
    name = "zzc" #类的公共属性
    __password="123456" #私有属性

    def __init__(self,sex,username):
        self.sex = sex
        self.username = username

u = User("男","yon")

u.name = "ww" #没有真正修改类的属性
User.name = "ww" 真正的类属性修改

类方法:

class A(object):
    def test1(self):  #self 调用这个方法的对象
        print("zzc")

    @classmethod #类方法一定要在上面加一个修饰器(Java注解),类方法的参数cls,代表调用这个方法的类
    def test2(cls):
        print("yon")

描述:

类属性又叫类变量(所有对象共享同一份类属性)

实例属性又叫成员变量(每个不同对象,有不一样值的实例属性)

object:

在python中,object是一个我们会经常遇到的词汇,那么这个词汇究竟有什么含义呢?通过查阅一些文档,我们发现,object其实是一个类的实例,而这个类的名字是Object(默认类的命名首字母大写),它是所有类的父类,换句话说,python是默认所有的类都继承自Object类。而如abc(抽象基类)等其他的内置的类都是基于Object类的一些功能实现的。可以说,Object类规定了类的结构,加载方式,常用函数等。
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值