一、类的定义

1.类=属性+方法,其中属性分为两种:类属性、实例属性

class Car():
    place = 'china'
    def made(self):
        self.name='奔驰'

print(Car.place)#类属性可以通过类名直接调用
#print(Car.name)#不能这么写,因为实例属性在方法内定义,不能通过类名直接调用,必须先创建对象,再通过对象调用方法,然后调用方法中的属性
a=Car()#先创建对象
a.made()#对用方法
print(a.name)#调用方法中的实例属性

注意:

    1.类属性是类所有对象共有的一个属性,可以通过类或者对象访问。而实例属性每个对象都拥有一个。

    2.类属性可以通过类名直接调用,实例属性在方法内定义,不能通过类名直接调用,必须先创建对象,再通过对象调用方法,然后调用方法中的属性。

    3.类方法中第一个参数必须是self,self代表的是类的实例化对象

    4.必须用class定义类

2.类变量不会被实例对象改变的,必须通过类方法改变

class Jingtai(object):
    Count = 0

Ja1 = Jingtai()
Ja2 = Jingtai()
Ja2.Count = 1
print(Ja2.Count,Ja1.Count)
class Jingtai(object):
    Count = 0
    def c(self):
        self.Count=2
        return self.Count

Ja1 = Jingtai()
Ja2 = Jingtai()
Ja2.Count = 1
print(Ja2.Count,Ja1.Count)
print(Ja1.c())
print(Ja1.Count)

二、构造函数__init__():

1.因为实例属性在方法中定义,调用时不方便,因此定义了构造函数,在构造函数中定义的属性都称为实例属性,调用时创建对象,直接用对象.属性名调用即可,因为在创建对象时,自动将对象传给self

class Car():
    place = 'china'
    def __init__(self):
        self.name='奔驰'
    def made(self):
        self.name='奔驰,宝马'
print(Car.place)

a=Car()#先创建对象
print(a.name)
a.made()
print(a.name)

三、私有属性和方法

1.在方法名或者变量名前用__定义,则变为私有,无法在类的外部直接访问,但是可以通过类的方法去访问该私有变量的值

class Student():

    def __init__(self, name, score):
        self.__name = name#私有属性
        self.__score = score#私有属性

    def __print_score(self):#私有方法
        print('%s: %s' % (self.__name, self.__score))
    def change_name(self):
        self.__print_score()
        return self.__name
b = Student('Bart Simpson', 98)
print(b.change_name())

四、静态属性(类属性)和方法

1、静态变量和静态方法都属于类的静态成员,它们与普通的成员变量和成员方法不同,静态变量和静态方法只属于定义它们的类,而不属于某一个对象。
2、静态变量和静态方法都可以通过类名和对象进行访问。

3.其中,静态属性就是类属性

4..静态方法:需要通过修饰器@staticmethod来进行修饰,静态方法不需要多定义参数 

5.如果一个类的方法在定义的时候,既 不需要 访问 实例属性 或者调用 实例方法,也 不需要 访问 类属性 或者调用 类方法,可以将其定义为静态方法。

6.静态方法由类调用 

class Car():
    place='杭州'
    @staticmethod
    def show_help():
        print("查找汽车信息")

五、类方法

1.是类所拥有的方法,用@classmethod来标识其为类方法。对于类方法,第一个参数必须是类对象,一般以cls作为第一个参数,也可以有别的参数。但是第一个必须是类对象。

2.类方法跟普通的方法区别就是可以直接通过类名.方法名的方式调用

class People():
    country = 'china'
 
    #类方法,用classmethod来进行修饰,跟普通的方法区别就是可以直接通过类名.方法名的方式调用
    @classmethod
    def getCountry(cls):
        return cls.country

六、类的继承

1必须用super().__init__(),去继承父类的属性

>>> class parent():
	def __init__(self,name,age,tall):
		self.name=name
		self.age=age
		self.tall=tall
 
		
>>> class child(parent):
	def __init__(self,name,age,tall):
		super().__init__(name,age,tall)
 
		
>>> A=child('zzz',16,180)
>>> A.name
'zzz'
>>> A.age
16
>>> A.tall
180

七、注意事项

1.若属性定义了初始值,则不用再提供形参:

>>> class Dog():
	def __init__(self,name,color):
		self.name=name
		self.color=color
		self.age=6

2.python中不支持方法的重载:即方法名相同,参数类型(参数个数不同)不同的函数,支持子类对父类方法的重写

3.导入模块的三种方法:

import math

import math as m

from math import sqrt