类和对象

1.类

 类:具有相同属性和方法的对象的集合;

对象:万物皆对象;

语法:

class 类名:

 属性

方法

 定义一个类:

 class Preson:

 def eat(self):

 print("正在吃饭");

  def sleep(self):

  print("正在睡觉")

类的命名

  首字母大写

         以大小写分割单词

         不使用下划线“_”


2.创建对象

 属性写在类外的情况,就是通过对象.属性,对象.方法()的方法调用

 对象的三要素:属性(对象是什么)、方法(对象能做什么)、事件(对象如何响应)

 相互关系:类是对象的抽象,对象是类的实例,类是一种抽象事物的分类,对象是一种实例;

3.属性

 概念:用于访问类字段的成员;

 属性用途:保证数据的安全,作数据的验证;

 属性名

  使用名词,说明操作对象
 
 首字母小写

 以大写字母分割单词


 方法名:

         使用谓词(动词+对象),说明对什么对象进行什么操作
 
         首字母小写

         以大写字母分隔单词

         updatePhone、a

   属性相对于类来说属于全局,每个方法都可以调用;


4.属性分归属  类属性 对象属性

对象属性的两种创建方式:

  self 对象的载体
 def __int__(self,name,age):
 self.name=name;
 self.age=age;
创建对象属性
 
5. 对象名.属性 赋值的形式

  __init__(self,name,age)在创建类的实例的时候,会自动调用这个方法,一般用户对实例属性初始化;
 class person:
   def__init__(self,name,age):
     self.name=name;
     self.age=age;
    print("执行init时就被调用了")
 p=person("tom",20)
 print(p.name)
 print(p.age)
 >>> 执行init时就被调用了
   tom
  22  
 
 __new__(cls,*agrs,**kwargs)在类调用init方法时,new方法决定是否要用init方法,因为new可以调用其他类的方法,或者返回别的对象来作为本类的实例;

 new()方法的特性:

   new()方法时在类准备将自身实例化时调用;

   new()方法始终都是类的静态方法,即使没有被加上静态方法装饰器;
 
 class A(object):
  def __init__(self,*args,**kwargs):
   print("init &&&& %s" % self.__class__)
  def __new__(cls,*args,**kwargs):
   print("new &&&& %s" % cla)
   return object.__new__(cls,*args,**kwargs)
 a=A()
 >>> new &&&&<class '__main__.A'>
  init &&&& <class '__main__.A'>

6.对象属性 私有和公有
 
  类属性 公有和私有

     对属性进行私有化 __属性,外部访问不到,也不可对属性进行赋值

 class Person('Bob')
 def __init__(self,name):
   self.name=name
   self.title='Mr'
   self.__job='Student'
 p=Person('Bob') 
 print(p.name)
   Bob
 print(p._title)
   Mr
 print(p.__job)

7. 封装  2步

   (1)把属性变成私有

   (2)用set()和get()函数写一个方法 

  class Person:
  def __init__(self,name,age):
   self.name=name
   self.__age=age
  def getAge(self):
   return self.__age
  def setAge(self,age):
   if age<0 orage>100:
    self.__age=18;
   else:
    self.__age=age
  def showtime(self):
   print("姓名:{}".format())
 p=Person("as",20);
 print(p.getAge())
 p.setAge(10)
 print(p.getAge())
 >>> 20
  10


8.def __str__() 一个类的实例变成str,需要用特殊方法__str__()

 class Person(object):
 def __init__(self,name,gender):
  self.name=name
  self.gender=gender
p=Person('Bob','male')
print(p)
>>><__main__.Person object at 0x02171270>


 
class Person(object):
 def __init__(self,name,gender):
  self.name=name
  self.gender=gender
 def __str__(self):
  return '(Person:%s,%s)'%(self.name,self.gender)
p=Person('Bob','male')
print(p)
>>>(Person:Bob,male)

9.公有方法和私有方法;

    私有方法在方法前加两个下划线:def __text():


10. 自动销毁方法:__del__(): 当对象没有引用的时候,或程序结束的时候,程序自动调用__del__()

      class Person:
   def __init__(self,name,age):
  self.name=name
  self.age=age
def __del__(self):
  print("对象张三被销毁")
zhangsan=Person("张三",20)
zhangsan.__del__()
>>> 对象张三被销毁
  对象张三被销毁

11.测试对象有多少次引用 

    import sys

    t=T()

    sys.getrefcount(t)返回2  从2开始
 
import sys
class Person:
 def __init__(self,name,age):
  self.name=name;
  self.age=age;
zhangsan=Person("张三",20)
print(sys.getrefcount(zhangsan))
>>>2  

12.访问私有属性可以通过 对象._类名__属性访问到(不建议用这个方法)


13.id()函数 查看对象的内存地址;


14.类属性:属于类成员,对象共有的;

    类方法:cls 表明是 类

                  在方法上添加 @classmethod装饰器

                  def class_method(cls):

                  可以通过类方法调用类属性,也可以通过对象调用类属性;
   
    修改类属性的2种方式:

                  1.类名.类属性=... 
                  2.实例对象__class__类属性=...

    静态方法:前面加@staticmethod,静态方法可以加参数,与类和对象都没有关系,也可以通过类和对象调用;

 class Person:
 def __init__(self,name,age):
 self.name=name;
self.age=age;
  def showInFo(self):
  print("姓名{0} 年龄{1}".format(self.name,self.age))
 
 @staticmenthod
 def goHome(self,name,by):
  print(name,"回家...",by)


15. dir()   __dir__  展示一个类/对象的内部属性和函数;
 
 dir(zhangsan);
zhangsan.__dir__()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值